Elasticsearch怎么能够先keyword精确查询,查不到再做text查询打分排序?

举个例子: 输入“好问题”, 字段为“好问题”的文档排在最前面,如果匹配不到,再匹配“好问题的确是一个好问题”或者“就是一个好问题”之类的,按照打分排序。
已邀请:

rockybean - ElasticStack Fans,公众号:ElasticTalk,慕课网《ElasticStack 从入门到实践》讲师

赞同来自:

感觉你是想把思路精准匹配的得分提高,归根结底应该是一个结果排序的问题,比如可以用 should 来提升精准查询的得分
 
POST _bulk
{"index":{"_index":"test_score","_type":"doc","_id":"1"}}
{"desc":"好问题"}
{"index":{"_index":"test_score","_type":"doc","_id":"2"}}
{"desc":"好问题的确是一个好问题"}
{"index":{"_index":"test_score","_type":"doc","_id":"3"}}
{"desc":"就是一个好问题"}



GET test_score/_search
{
"query": {
"bool": {
"must": {
"match": {
"desc": "好问题"
}
},
"should": {
"match": {
"desc.keyword": {
"query": "好问题",
"boost": 10
}
}
}
}
}
}
 
如果你一定要先精准查询,那就考虑用两条语句来实现了,比如先验证 count 是否大于0,然后再做对应的处理
 

tc

赞同来自:

一定先精确查询,就要两条语句吗?Elasticsearch有没有办法把keyword匹配的打分提成最高打分?

要回复问题请先登录注册