Rei*_*ghe 35 term elasticsearch
我对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"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我使用2个术语时,它就像一个魅力,但当我使用3个术语时却没有.
谢谢您的帮助!!
Duc*_*ong 72
您应该使用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" } }
]
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
Jai*_*rel 14
正如其中一条评论所说,最近的 ES 版本中的语法发生了变化。如果您使用的是Elasticsearch 6.+,并且您想在查询中使用通配符和一系列术语(例如在问题中),您可以使用以下内容:
GET your_index/_search
{
"query": {
"bool": {
"must": [
{
"wildcard": {
"your_field_name_1": {
"value": "tom*"
}
}
},
{
"term": {
"your_field_name_2": {
"value": "US"
}
}
},
{
"term": {
"your_field_name_3": {
"value": "Michigan"
}
}
},
{
"term": {
"your_field_name_4": {
"value": "0"
}
}
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
此外,从有关通配符查询的文档中:
请注意,此查询可能很慢,因为它需要迭代许多项。为了防止极慢的通配符查询,通配符术语不应以通配符 * 或 ? 之一开头。
我希望这有帮助。
| 归档时间: |
|
| 查看次数: |
47351 次 |
| 最近记录: |