首页 > 解决方案 > 如何提高建议者的结果,但不使用弹性搜索过滤?

问题描述

我正在使用弹性搜索 5.6。

我正在使用完成建议器在搜索字段中返回结果。我已成功映射和索引我的文档。我也得到了接近预期结果的结果。

在文档中,提到可以实现一个上下文来提升和/或过滤这里看到的结果:

完成建议器会考虑索引中的所有文档,但通常希望提供通过某些标准过滤和/或提升的建议。

但是,我的问题是,我只收到过滤结果......而不仅仅是提升结果。如果我正确阅读文档,我应该能够在不过滤的情况下进行提升。文档

这个问题在一个简单的例子中很明显。假设搜索查询是“波特兰”。用户是缅因州波特兰,所以我想将该结果提高到比俄勒冈州波特兰更高的水平。但是,目前我的上下文正在过滤结果,因此返回的不是 Portland、MEPortland,或者仅返回 Portland,而是返回 ME,因为它位于上下文区域内。

映射:

{
    "mappings": {
        "destination" : {
            "_all": {"enabled": false},
            "properties" :  {
                "name": {
                    "type": "text"
                },
                "suggest": {
                    "type": "completion",
                    "analyzer": "simple",
                    "contexts": {
                        "name": "location",
                        "type": "geo",
                        "path": "location"
                    }
                },
                "type": {
                    "type" : "keyword"
                },
                "state": {
                    "type" : "keyword"
                },
                "location": {
                    "type": "geo_point",
                    "index": true
                },
            }
        }
    }
}

示例索引文档:

{
  "name": "Portland",
  "location": [
    -70.25533,
    43.66147
  ],
  "suggest": {
    "input": "Portland"
  },
  "state": "ME",
  "type": "city"
}

最后,我的查询:

{
        "suggest": {
            "query-suggest" : {
                "prefix" : search_query,
                "completion": {
                    "field" : "suggest",
                    "size": 10,
                    "contexts": {
                        "location": [ 
                            {
                                "lat": loc.latitude,
                                "lon": loc.longitude,
                                "precision": 1
                            },
                            {
                                "context": {
                                    "lat": loc.latitude,
                                    "lon": loc.longitude
                                },
                                "boost": 2
                            }
                         ]
                    }
                }
            }
        }  
    };

根据设置位置的位置,ES 仅在该地理上下文中返回结果。我想要在那个地理环境中提升价值,而不是过滤。如何在不过滤它们的情况下根据我的地理上下文获得提升值,从而首先返回提升值,然后是可能在地理上下文之外的下一个得分最高的文档。

标签: elasticsearch

解决方案


推荐阅读