我有一个包含2种不同文档类型的弹性搜索索引:'a'
和'b'
。我想按类型对结果进行排序,并优先考虑type='b'
(即使它的得分较低)。我一直在客户端使用下面的搜索结果并对它们进行排序,但我已经意识到这种方法效果不好,因为我只检查前10个结果,通常不包含任何b。增加返回结果并不理想。我想通过弹性搜索来完成这项工作。
http://<server>:9200/my_index/_search?q=london
答案 0 :(得分:4)
您需要使用function_score
,并根据您对文档的评分方式,针对每种类型test some weight
values, boost_mode
s and score_mode
s进行操作。例如:
GET /some_index/a,b/_search
{
"query": {
"function_score": {
"query": {
# your query here
},
"functions": [
{
"filter": {
"type": {
"value": "b"
}
},
"weight": 3
},
{
"filter": {
"type": {
"value": "a"
}
},
"weight": 1
}
],
"score_mode": "first",
"boost_mode": "multiply"
}
}
}
答案 1 :(得分:-1)
它为我工作。你将在命令提示符下执行以下命令。
curl -XGET localhost:9200/index_v1,index_v2/_search?pretty -d @boost.json
boost.json {
"indices_boost" : {
"index_v2" : 1.4,
"index_v1" : 1.3
}
}