我正在使用弹性搜索 5.6。
我正在使用完成建议器在搜索字段中返回结果。我已成功映射和索引我的文档。我也得到了接近预期结果的结果。
在文档中,提到可以实现上下文来提升和/或过滤这里看到的结果:
完成建议器会考虑索引中的所有文档,但通常需要提供由某些标准过滤和/或提升的建议。
然而,我的问题是,我只收到过滤的结果......而不是简单的提升结果。如果我正确阅读文档,我应该能够在不过滤的情况下进行提升。文档
这个问题在一个简单的例子中很明显。假设搜索查询是“波特兰”。用户是密西根州波特兰市,因此我希望将该结果提高到比俄勒冈州波特兰市更高的结果。但是,目前我的上下文正在过滤结果,因此返回的不是 Portland, ME和Portland, OR,而是返回 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
},
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
示例索引文档:
{
"name": "Portland",
"location": [
-70.25533,
43.66147
],
"suggest": {
"input": "Portland"
},
"state": "ME",
"type": "city"
}
Run Code Online (Sandbox Code Playgroud)
最后,我的查询:
{
"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
}
]
}
}
}
}
};
Run Code Online (Sandbox Code Playgroud)
根据位置设置的位置,ES 仅返回该地理上下文内的结果。我想要在那个地理环境中提升值,而不是过滤器。如何在不过滤的情况下根据我的地理上下文获得提升的值,从而首先返回提升的值,然后是可能在地理上下文之外的下一个得分最高的文档。
| 归档时间: |
|
| 查看次数: |
329 次 |
| 最近记录: |