我正在创建一个具有地理上下文 (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
}
]
}
}
}
}
但是,我无法在不进行过滤的情况下仅在单个地理环境中提升它。 当我提交以下查询时,它会过滤 和 提升:
GET /my-index/_search
{
"suggest": {
...
"completion": {
"field": "suggest",
"size": "10",
"contexts": {
"geoloc": [
{
"lat": 44.8214564,
"lon": -93.475399,
"boost": 2
}
]
}
}
}
}
是我正在尝试做的事情不受支持,还是我遗漏了什么?
谢谢! 杰森
最佳答案
刚刚也遇到了这个问题。
我通过反复试验得出的解决方案是使用类别上下文首先过滤我的所有文档。假设您在名为“all”的文档中添加了一个类别,您可以这样做:
GET /my-index/_search
{
"suggest": {
...
"completion": {
"field": "suggest",
"size": "10",
"contexts": {
"category": ["all"],
"geoloc": [
{
"lat": 44.8214564,
"lon": -93.475399,
"precision": 2,
"boost": 2
}
]
}
}
}
}
完成后,它似乎选择了“所有”类别的所有内容,然后将指定精度级别内的所有内容提升到顶部。
使用 Elastic 6.*
关于Elasticsearch 上下文建议地理上下文 - 无需过滤即可提升?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47895927/