我对 Elasticsearch 还很陌生,所以这是我的问题。
我想用 elasticsearch 进行搜索查询并想用多个术语进行过滤。
如果我想搜索用户“tom”,那么我希望获得用户“isActive = 1”、“isPrivate = 0”和“isOwner = 1”的所有匹配项。
这是我的搜索查询
"query":{
"filtered": {
"query": {
"query_string": {
"query":"*tom*",
"default_operator": "OR",
"fields": ["username"]
}
},
"filter": {
"term": {
"isActive": "1",
"isPrivate": "0",
"isOwner": "1"
}
}
}
}
当我使用 2 个术语时,它就像一个魅力,但当我使用 3 个术语时,它就不起作用了。
谢谢您的帮助!!
你应该使用bool filter
to AND
您的所有条款:
"query":{
"filtered": {
"query": {
"query_string": {
"query":"*tom*",
"default_operator": "OR",
"fields": ["username"]
}
},
"filter": {
"bool" : {
"must" : [
{"term" : { "isActive" : "1" } },
{"term" : { "isPrivate" : "0" } },
{"term" : { "isOwner" : "1" } }
]
}
}
}
}
对于 2.x+ 版本,您可以使用bool
查询而不是filtered
进行一些简单替换的查询:https://www.elastic.co/guide/en/elasticsearch/reference/7.4/query-dsl-filtered-query.html https://www.elastic.co/guide/en/elasticsearch/reference/7.4/query-dsl-filtered-query.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)