首页 > 解决方案 > 如何编写 Elasticsearch DSL 多字段多词查询?

问题描述

我应该如何编写 Elasticsearch (6.6) DSL 查询以仅返回此示例池中的文档 Doc2 和 Doc3:

Doc1 { "Field1" : "Term1", "Field2" : "Term2" }
Doc2 { "Field1" : "Term6", "Field2" : "Term2" }
Doc3 { "Field1" : "Term6", "Field2" : "Term5" }
Doc4 { "Field1" : "Term3", "Field2" : "Term1" }

查询逻辑:(Field1 or Field2)不等于(Term1 or Term2 or Term3)

标签: elasticsearchdsl

解决方案


假设Field1andField2是关键字的数据类型,您可以使用bool 查询的 should 和 must_not 子句与terms 查询来获得所需的结果。

查询将如下所示:

{
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "must_not": [
              {
                "terms": {
                  "Field1": [
                    "Term1",
                    "Term2",
                    "Term3"
                  ]
                }
              }
            ]
          }
        },
        {
          "bool": {
            "must_not": [
              {
                "terms": {
                  "Field2": [
                    "Term1",
                    "Term2",
                    "Term3"
                  ]
                }
              }
            ]
          }
        }
      ]
    }
  }
}

推荐阅读