elasticsearch - 在Elasticsearch中组合嵌套文档中的缺失查询和术语查询

标签 elasticsearch

我有这3个文档,其中fields的类型为nested:

{
  "fields": [
    {"field_id": 23, "value": "John Doe"},
    {"field_id": 92, "value": null}
  ]
}

{
  "fields": [
    {"field_id": 23, "value": "Ada Lovelace"},
  ]
}

{
  "fields": [
    {"field_id": 23, "value": "Jack Daniels"},
    {"field_id": 92, "value": "jack@example.com"}
  ]
}

我需要在以下位置搜索文档:
(`field_id` = `92` AND `value` is `null`) OR (`field_id` `92` is missing.)

组合术语和缺少查询会导致仅返回null值的文档:
...
"nested": {
  "path": "fields",
  "filter": {
    "bool": {
      "bool": {
        "must": [
          {
            "missing": {
              "field": "fields.value"
            }
          },
          {
            "terms": {
              "fields.field_id": [92]
            }
          }
        ]
      }
    }
  }
}
...

我怎样才能做到这一点?

最佳答案

您已经有一个条件的查询。让我们将其称为。对于第二种情况,请检查嵌套文档中的fields.field_id: 92。可以说这是 B 。但是您的条件是fields.field_id: 92不应该存在。因此,要在must_not中将此 B 换行即可。即 B'

所需的是 A或B'

因此,最终查询将是:

{
  "query": {
    "bool": {
      "should": [
        {
          "nested": {
            "path": "fields",
            "query": {
              "bool": {
                "must": [
                  {
                    "term": {
                      "fields.field_id": 92
                    }
                  }
                ],
                "must_not": [
                  {
                    "exists": {
                      "field": "fields.value"
                    }
                  }
                ]
              }
            }
          }
        },
        {
          "bool": {
            "must_not": [
              {
                "nested": {
                  "path": "fields",
                  "query": {
                    "term": {
                      "fields.field_id": 92
                    }
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }
}

关于elasticsearch - 在Elasticsearch中组合嵌套文档中的缺失查询和术语查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54009318/

相关文章:

python - 使用 Elasticsearch 后端使 “more like this”无法在Haystack中返回任何结果

elasticsearch - 使用数据库中50个表中的数据创建一个kibana仪表板

elasticsearch - 如果类型条件不起作用,则为Logstash

elasticsearch - ES插件查询

elasticsearch - Elasticsearch-关于文档的nGram,但不包括搜索词

java - 调整 ElasticSearch 中的相关性

curl - AND 在 elasticsearch 中使用 curl 进行查询

elasticsearch - Elasticsearch:具有过滤器的查询是否会受到不在过滤器中的记录的相关性的影响?

ruby-on-rails - 在Rails中使用单表继承进行轮胎搜索

elasticsearch - ElasticSearch批量api中的其他操作参数在哪里?