如何解决具有多个 and 和 or 条件的 Elasticsearch 嵌套查询
我正在尝试在 elasticsearch 中生成嵌套的 must
和 should
查询以模拟以下条件:
( (brandsvisited ilike '%adidas%' or brandsvisited ilike '%skechers%' ) or( placecategory ilike '%Pizza Restaurant Visitors%' or placecategory ilike '%Grocery Store Visitors%' ) and( gender='Male' ) ) and polygonid = '1465'
我在 elasticsearch 中创建了以下查询。
"query": {
"bool": {
"must": [
{"term": {"polygonid": "1465"}},{"term": {"gender": "Male"}},{
"bool": {
"should": [
{"term": {"brandsvisited": "adidas"}},{"term": {"brandsvisited": "skechers"}}
],"minimum_should_match": 1
}
},{
"bool": {
"should": [
{"term": {"placecategory": "Pizza Restaurant Visitors"}},{"term": {"placecategory": "Grocery Store Visitors"}}
],"minimum_should_match": 1
}
}
]
}
}
上述查询返回零个结果。但是,如果我删除最后一个布尔值应该查询,它会返回结果。不知道我哪里出错了。
解决方法
假设 placecategory
字段是文本类型。您需要将其替换为 placecategory.keyword
字段(如果您尚未定义任何显式索引映射)
Term query 返回在提供的字段中包含确切术语的文档。如果您尚未定义任何显式索引映射,则需要将 .keyword 添加到该字段。这使用关键字分析器而不是标准分析器。
修改您的查询,如下所示
{
"query": {
"bool": {
"must": [
{
"term": {
"polygonid": "1465"
}
},{
"term": {
"gender": "Male"
}
},{
"bool": {
"should": [
{
"term": {
"brandsvisited": "adidas"
}
},{
"term": {
"brandsvisited": "skechers"
}
}
],"minimum_should_match": 1
}
},{
"bool": {
"should": [
{
"term": {
"placecategory.keyword": "Pizza Restaurant Visitors"
}
},{
"term": {
"placecategory.keyword": "Grocery Store Visitors"
}
}
],"minimum_should_match": 1
}
}
]
}
}
}
如果您想在 placecategory
中搜索确切的术语,那么您可以使用带有 should
子句或 terms query 的术语查询,否则,如果您想匹配placecategory
字段中的短语,然后您可以使用 match_phrase 查询
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。