我是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个术语时,它就不起作用了。
谢谢你的帮助!!
发布于 2014-01-18 22:58:47
你应该使用bool filter
来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://stackoverflow.com/questions/21202775
复制相似问题