Elasticsearch Context建议者地理环境 - 没有过滤的提升?

时间:2017-12-19 22:09:57

标签: elasticsearch

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

 mapping...
        "suggest": {
          "type": "completion",
          ...
          "contexts": [
          {
            "name": "geoloc",
            "type": "geo",
            "precision": 3,
            "path": "geolocation"
          }
        ]

当我查询此内容时,我希望按地理位置上下文进行过滤,只会提升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
            }
          ]
        }
      }
  }
}

但是,我无法在没有过滤的情况下仅在单个地理环境中进行提升。  当我提交以下查询时,它会过滤 boosts:

GET /my-index/_search
{
  "suggest": {
      ...
      "completion": {
        "field": "suggest",
        "size": "10",
        "contexts": {
          "geoloc": [
            {
              "lat": 44.8214564,
              "lon": -93.475399,
              "boost": 2
            }
          ]
        }
      }
  }
}

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

谢谢! 杰森

1 个答案:

答案 0 :(得分:1)

也碰到了这个问题。

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

// To access each of the person
myObj.forEach(person => {
   console.log(person);
   // Output { name, age, cars }

   // To access each of the person's car
   person.cars.forEach(car => {
     console.log(car);
     // output { name, models }
   });
});

完成此操作后,似乎在选择“ all”类别中的所有内容,然后将其提高到指定的精度级别之内。

使用Elastic 6。*