映射,即时通讯试图使过滤器:Elasticsearch过滤器来匹配分析指数的阵列值的字段的
"genres": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
即使世界使用这些值的条目:我试图让
"genres": [
"Animation",
"History"
],
一个过滤器,在那里我会输入“动画” - 它会返回所有具有动画作为其流派的条目。
使用方面尝试:
GET /test/_search
{
"query": {
"bool": {
"filter": {
"terms": {
"genres": [
"Animation",
"History"
]
}
}
}
}
}
}
这导致没有条目,当我读到更多我知道我需要重新映射我的数据库,并把“指数”:“not_analyzed” - 那么它会返回一些条目。
不过,我可以不使用过滤器,使用这样的事情得到这些结果:
GET /tmdb/_search
{
"query": {
"bool": {
"must" : [
{
"match": {
"genres": "history"
}
},
{
"match": {
"genres": "animation"
}
}
]
}
}
}
这确实给了我一些成果,但它只返回那些既有“动画”与“历史”的价值观作为他们的流派。
所以我的问题 - 我需要重新映射我的数据库,并添加“索引”:“not_analyzed”到我将使用过滤器的列,或者我去与第二个选项(不使用过滤器) 。
编辑: 思想像这样的工作,但它不是工作,我预计(运营商似乎并没有为我工作):
GET /test/_search
{
"query": {
"match": {
"genres": {
"query": "animation",
"query": "history",
"operator": "and"
}
}
}
}
我越来越沮丧没有找到答案,这解决了我的问题。谢谢! – Edgar
很高兴帮助! – Val