我需要使用 Elasticsearch 改进搜索结果列表。
假设我们有 3 个具有单个字段和内容的文档,如下所示:
如果我搜索“apple”,它可能会发生,我得到的结果是这样排序的:
但我想要的是具有最高分的精确匹配,这里是带有“apple”的文档。
下一个最高分应该是以搜索词开头的条目,这里是“苹果树”,其余排序默认方式。
所以我想拥有它:
我试图通过使用 rescore 来实现它:
curl -X GET "http://localhost:9200/my_index_name/_search?size=10&pretty" -H 'Content-Type: application/json' -d'
{
"query": {
"query_string": {
"query": "apple"
}
},
"rescore": {
"window_size": 500,
"query": {
"score_mode": "multiply",
"rescore_query": {
"bool": {
"should": [
{
"match": {
"my_field1": {
"query": "apple",
"boost": 4
}
}
},
{
"match": {
"my_field1": {
"query": "apple*",
"boost": 2
}
}
}
]
}
}, …Run Code Online (Sandbox Code Playgroud)