在Elastic Search中使用完成建议器查询检查不为null

时间:2018-09-11 13:32:05

标签: elasticsearch curl elastic-stack

我有一个现有查询,可为具有以下查询的邮政编码提供建议(我已将其硬编码为 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 开头的结果。因此,我相信它正在查询城市所在的所有地址,而忽略了完成建议者查询。您能告诉我哪里出了问题吗?或者可能是如何正确编写它。

1 个答案:

答案 0 :(得分:2)

由于completion提示者使用FST(在索引时建立的特殊内存数据结构)进行快速搜索,因此无法在查询时过滤出建议。

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