使用 Elastic Search 中的完成建议查询检查是否为空

Checking for not null with completion suggester query in Elastic Search

我有一个现有查询,它为具有以下查询的邮政编码提供建议(我已经使用邮政编码将其硬编码为 T0L

 "suggest":{
    "suggestions":{
      "text":"T0L", 
      "completion":{
        "field": "postcode.suggest"
      }
    }
  }

这工作正常,但它会搜索城市包含空值的一些结果。所以我需要过滤城市不为空的地址。

所以我遵循了 this 上的解决方案并准备了这样的查询。

{
 "query": {
   "constant_score": {
     "filter": {
       "exists": {
         "field": "city"
       }
     }
   }
 }, 
  "suggest":{
    "suggestions":{
      "text":"T0L", 
      "completion":{
        "field": "postcode.suggest"
      }
    }
  }
}

但不幸的是,这没有给出邮政编码包含 T0L 的所需地址,而是我得到的结果是邮政编码以 A1X 开头.所以我相信它正在查询城市所在的所有地址并忽略完成建议查询。你能告诉我错误在哪里吗?或者可能是如何正确编写它。

无法在查询时过滤掉建议,因为 completion suggester 使用 FST(在索引时构建的特殊内存数据结构)进行闪电般的快速搜索。

但是您可以更改您的映射并为您的建议者添加 context。上下文的基本思想,它也在索引时与 completion 字段一起填充,因此可以在查询时与 suggest 查询一起使用。