Elasticsearch Context Suggester 地理上下文 - 无需过滤即可提升?

Jas*_*ott 5 elasticsearch

我正在创建一个带有地理上下文的完成建议器(Elastic 5.x)。

 mapping...
        "suggest": {
          "type": "completion",
          ...
          "contexts": [
          {
            "name": "geoloc",
            "type": "geo",
            "precision": 3,
            "path": "geolocation"
          }
        ]
Run Code Online (Sandbox Code Playgroud)

当我查询这个时,我希望它按地理上下文过滤,只增强 geohash 内的结果。通过单个 geohash 进行过滤,或者通过较低精度进行过滤,然后在原始过滤器中提高更高的精度,效果非常好,如下所示:

GET /my-index/_search
{
  "suggest": {
      ...
      "completion": {
        "field": "suggest",
        "size": "10",
        "contexts": {
          "geoloc": [
            {
              "lat": 44.8214564,
              "lon": -93.475399,
              "precision": 1
            },
            {
              "lat": 44.8214564,
              "lon": -93.475399,
              "boost": 2
            }
          ]
        }
      }
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,我无法让它仅在单个地理上下文上增强而不进行过滤。当我提交以下查询时,它会过滤增强:

GET /my-index/_search
{
  "suggest": {
      ...
      "completion": {
        "field": "suggest",
        "size": "10",
        "contexts": {
          "geoloc": [
            {
              "lat": 44.8214564,
              "lon": -93.475399,
              "boost": 2
            }
          ]
        }
      }
  }
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试做的事情是否不受支持,或者我错过了什么?

谢谢!贾森

daa*_*sie 3

刚刚也遇到了这个问题。

我通过反复试验想出的解决方案是使用类别上下文首先过滤我的所有文档。假设您已在文档中添加了一个名为“all”的类别,您可以执行以下操作:

GET /my-index/_search
{
  "suggest": {
      ...
      "completion": {
        "field": "suggest",
        "size": "10",
        "contexts": {
          "category": ["all"],
          "geoloc": [
            {
              "lat": 44.8214564,
              "lon": -93.475399,
              "precision": 2,
              "boost": 2
            }
          ]
        }
      }
  }
}
Run Code Online (Sandbox Code Playgroud)

完成此操作后,它似乎会选择“全部”类别中的所有内容,然后将指定精度级别内的内容提​​升到顶部。

使用弹性 6.*