我正在使用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仅返回该地理位置中的结果。我希望在该地理环境中提升值,而不是过滤器。如何根据我的地理环境获得提升值而不过滤它们,从而首先返回提升值,然后返回可能在地理环境之外的下一个最高得分文档。