【发布时间】:2014-09-24 17:39:12
【问题描述】:
我有一个这样的查询:
{
"sort": [
{
"_geo_distance": {
"geo": {
"lat": 39.802763999999996,
"lon": -105.08748399999999
},
"order": "asc",
"unit": "mi",
"mode": "min",
"distance_type": "sloppy_arc"
}
}
],
"query": {
"bool": {
"minimum_number_should_match": 0,
"should": [
{
"match": {
"name": ""
}
},
{
"match": {
"credit": true
}
}
]
}
}
}
我希望我的搜索始终返回所有结果,只是与那些匹配标志更接近顶部的结果进行排序。
我希望排序优先级类似于:
- searchTerm(名称,字符串)
- 标志(信用/atm/ada/等,布尔值)
- 距离
如何做到这一点?
到目前为止,您在上面看到的查询就是我得到的全部信息。我无法弄清楚如何始终返回所有结果,也无法弄清楚如何将其他查询合并到排序中。
【问题讨论】:
-
您的要求有点混乱。您说“具有匹配标志的那些”应该“更接近顶部”。但是您的排序优先级将“名称”作为最高排序标准。那么,它应该首先找到所有匹配的名称,然后考虑匹配标志的数量(匹配标志越多越好)?假设您要搜索银行分行 - 您希望名称与分行具有“信用”功能、“自动取款机”功能的事实相匹配?或者您想找到具有“好”名称和一些“好”功能的分支?意味着名称和这些功能有多重要?
标签: node.js sorting elasticsearch search-engine