elasticsearch - 如何提高建议者的结果,但不使用弹性搜索过滤?
问题描述
我正在使用弹性搜索 5.6。
我正在使用完成建议器在搜索字段中返回结果。我已成功映射和索引我的文档。我也得到了接近预期结果的结果。
在文档中,提到可以实现一个上下文来提升和/或过滤这里看到的结果:
完成建议器会考虑索引中的所有文档,但通常希望提供通过某些标准过滤和/或提升的建议。
但是,我的问题是,我只收到过滤结果......而不仅仅是提升结果。如果我正确阅读文档,我应该能够在不过滤的情况下进行提升。文档
这个问题在一个简单的例子中很明显。假设搜索查询是“波特兰”。用户是缅因州波特兰,所以我想将该结果提高到比俄勒冈州波特兰更高的水平。但是,目前我的上下文正在过滤结果,因此返回的不是 Portland、ME和Portland,或者仅返回 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 仅在该地理上下文中返回结果。我想要在那个地理环境中提升价值,而不是过滤。如何在不过滤它们的情况下根据我的地理上下文获得提升值,从而首先返回提升值,然后是可能在地理上下文之外的下一个得分最高的文档。
解决方案
推荐阅读
- rdf - 货币的 RDF 标准数据类型
- groovy - 如何将每个采样器的开始和结束时间捕获到变量中,并将其作为输入传递给采样器请求?
- sublimetext3 - 是否可以为每个项目定义不同的配色方案?
- android - EditText 文本下的行是如何创建的?
- javascript - 有没有办法让一个重定向的 html 页面作为图像的来源?
- aws-sdk-js - AWS JS SDK S3 使用自定义配置文件
- laravel - 如何在 Laravel 资源中发送特定字段
- c# - Aspose.Word .Net Core 3 设置问题
- c# - 可以使用自动映射器对资源中的数据进行分组吗?
- nginx - nginx为位置a提供404,而位置b工作正常