当前位置: 首页 > 知识库问答 >
问题:

如何在ElasticSearch中结合查询、must和must_not?

酆阳煦
2023-03-14

应查找下列文件

matches query 'my text' AND (has not field OR field with value)

我尝试了以下方法:

GET /myIndex/_search

{
  "query": {
    "bool": {
      "must": [
        {
          "query_string": {
            "query": "my text"
          }
        },
        {
        }
      ],
      "filter": {
        "bool": {
          "must_not": {
            "exists": {
              "field": "myField"
            }
          },
          "must": {
            "terms": {
              "myField": [
                "myValue"
              ]
            }
          }
        }
      }
    }
  }
}

它应该(但不是)这样工作:

  1. bool通过或必须筛选部分
  2. 组合
  3. 第一个必须按查询选择
  4. 筛选器使用bool组合by或must和must_not`

但其行为类似于mustmust_notvia AND子句组合。例如。当我删除“must”或“must_not”时,查询工作。

如何通过OR子句更改查询以将“must”与“must_not”组合?

Elasticsearch版本为5.3.2

共有1个答案

郭翰翮
2023-03-14

mustmust_not术语之间需要额外的bool过滤器

你也应该想想你的myField字段。如果定义为文本或关键字。通过elasticsearch 5.6.1测试,以下查询工作:

{
  "query": {
     "bool": {
        "must": [{

          "query_string": {
             "query": "this is a text content"
          }
        }],

        "filter": {
           "bool": {
              "should" : [{                
                 "bool" : {
                    "must_not": {
                      "exists": {
                         "field": "myField"
                       }
                     }
                  }
              },
              {
                "bool" : {
                  "must": {
                    "terms": {
                       "myField.keyword": ["my field exists and has a value"]
                     }
                   }
                }
              }]

         }
      }
   }
  }
}
 类似资料:
  • 还有 我可以使用多个过滤器在一个必须像下面的代码:

  • 问题内容: 供参考的是代码。我正在尝试制作一个记录到elasticsearch的hubot插件,然后使用hubot命令搜索那些日志。 https://gist.github.com/4050748 我正在尝试检索与两个查询匹配的记录。 我期待: 多达50条记录 具有给定用户的记录 最近一小时的记录 我有: 最多10条记录 具有给定用户的记录 从任何时候 我如何在过去一小时内获取带有某些用户名的所有

  • 问题内容: 我目前正在使用ElastSearch查询,该查询当前看起来如下所示: 因此,现在当条件1或条件2匹配时,将忽略文档。查询的外观如何,以便仅忽略符合条件1和条件2的文档? 问题答案: 由于不可能更新elasticsearch版本,因此我不得不找到另一个解决方案。这对我有用:

  • 发布/xyz/_search 我得到了相同的结果,那么什么时候应该使用must和什么时候应该使用filter呢?有什么区别?

  • 问题内容: 我为嵌套对象具有以下索引架构: 数据如下: 现在,如果我做一些简单的查询,例如找到“ isCurrentWorkplace”为true且title.id为259的工作场所,则它可以正常工作: 现在的问题是,我需要组合这些必须子句。例如,我需要找到一条记录,其“ isCurrentWorkplace”为true,“ title.id”为259 AND “ isCurrentWorkpla

  • 我不熟悉Mongo中的聚合查询,并且一直在努力产生我想要的输出。我有以下聚合查询: 返回以下结果: 如何修改聚合查询,以便只返回2个文档而不是3个文档?将两个“ABC-123”结果合并为一个结果,并使用带有“bu”和“count”字段的新计数数组,即。 非常感谢