我正在尝试使用ElasticSearch执行搜索,该搜索必须匹配部分索引中的某些搜索字词,但仅适用于属于某些项目的部分,即当前用户可以访问的项目。
所以我正在尝试对查询应用过滤器,以便它将过滤那些将project_id包含在一小组2或3个不同值中的部分。如果某个部分的project_id属于有效的project_id,则应该包含它。否则就不会。
这都是使用elasticsearch-model gem的rails api的上下文。
这是我传入的查询。它假装过滤部分,因此只有项目2和5中的部分包含在结果中。
{
"query": {
"filtered": {
"query": {
"multi_match": {
"query": "search terms here",
"type": "cross_fields",
"fields": ["title^3", "contents"],
"operator": "and"
}
},
"filter": {
"or": {
"filters": [
{ "exists": { "project_id": 2 } },
{ "exists": { "project_id": 5 } }
]
}
}
}
}
}
我收到了这个错误:
QueryParsingException[[sections] [exists] filter does not support [project_id]]
有什么想法吗?
答案 0 :(得分:7)
现有过滤器意味着检查字段是否存在。refer。
获得你想要达到的目标。
{
"query": {
"filtered": {
"query": {
"multi_match": {
"query": "search terms here",
"type": "cross_fields",
"fields": [
"title^3",
"contents"
],
"operator": "and"
}
},
"filter": {
"terms": {
"project_id": ["1","2"]
}
}
}
}
}
它有帮助......!