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允许将查询与布尔查询组合。布尔查询有三个字段:
- 必须(和)
- 应(或)
- 不得(且不得)
- 第一个选项选择城市字段至少包含一个令牌==“myCity”的项目
- 第二个选项选择没有城市字段的项目
city='mycity'或city为NULL
:
{
"query": {
"bool": {
"should": [
{
"match": {
"city": "mycity"
}
},
{
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"missing": {
"field": "city"
}
}
}
}
]
}
}
}
一些有用的资源: