elasticsearch 弹性搜索中同一字段的查询与过滤组合,elasticsearch,lucene,elasticsearch,Lucene" /> elasticsearch 弹性搜索中同一字段的查询与过滤组合,elasticsearch,lucene,elasticsearch,Lucene" />

elasticsearch 弹性搜索中同一字段的查询与过滤组合

elasticsearch 弹性搜索中同一字段的查询与过滤组合,elasticsearch,lucene,elasticsearch,Lucene,我有一个地址文档类型,其中城市为字段。城市场使用分析仪 "keyword_analyzer": { "tokenizer": "keyword", # So that we don't split multi word city name "filter": ["lowercase"] # The search needs to case insensitive } 如何获取与给定城市“X”或城市为空匹配的任何地址。在sql中,它将被写为 SELECT * FROM address W

我有一个地址文档类型,其中城市为字段。城市场使用分析仪

"keyword_analyzer": {
  "tokenizer": "keyword", # So that we don't split multi word city name
  "filter": ["lowercase"] # The search needs to case insensitive
}
如何获取与给定城市“X”或城市为空匹配的任何地址。在sql中,它将被写为

SELECT * FROM address
WHERE city = 'X' or city IS NULL

我想我必须使用匹配查询来获取
city='X'
,而使用“缺失”过滤器来获取
city为NULL
。如何将其组合?

Elasticsearch允许将查询与布尔查询组合。布尔查询有三个字段:

  • 必须(和)
  • (或)
  • 不得(且不得)
以下elasticsearch查询是一个包含“应”字段的布尔查询,包含两个子查询:

  • 第一个选项选择城市字段至少包含一个令牌==“myCity”的项目
  • 第二个选项选择没有城市字段的项目
此查询的结果将等效于
city='mycity'或city为NULL

{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "city": "mycity"
          }
        },
        {
          "filtered": {
            "query": {
              "match_all": {}
            },
            "filter": {
              "missing": {
                "field": "city"
              }
            }
          }
        }
      ]
    }
  }
}
一些有用的资源: