如何提高建议者的结果,但不过滤弹性搜索?

时间:2018-06-16 09:19:06

标签: elasticsearch

我正在使用Elastic Search 5.6。

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

在文档中,它提到可以实现上下文来提升和/或过滤此处显示的结果:

  

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

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

这个问题在一个简单的例子中很明显。我们假设搜索查询是" Portland"。用户是波特兰,ME,所以我想提高结果比波特兰,或更高。但是,目前我的上下文是过滤结果,所以不是波特兰,ME 波特兰,或者返回OR,只有波特兰,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仅返回该地理位置中的结果。我希望在该地理环境中提升值,而不是过滤器。如何根据我的地理环境获得提升值而不过滤它们,从而首先返回提升值,然后返回可能在地理环境之外的下一个最高得分文档。

0 个答案:

没有答案