事实上,有很多方法可以“控制”得分。在索引之前,如果您已经有一些文档是为了获得高分/提升。您可以在索引之前给特殊文档打高分,请参考这里。
如果在索引之前无法确定boost,可以在查询命令中boost。关于 boosting 查询,也有很多选项,这取决于您使用的查询类型。
对于查询字符串查询:
您可以提升一些字段,例如fields" : ["content", "name.*^5"]
,或提升一些查询命令,例如,quick^2 fox
(这可能对您有用,只是额外提升名称)。
为他人:
您可以为术语查询提供提升,例如提升“ivan”案例:
"term" : {"name" : {"value" : "ivan","boost" : 10.0}}
您可以将其包装成 bool 查询并提升所需的情况。前任。查找所有“ivan”,在名称字段中提升“ji”。
{“查询”:{“布尔”:{“必须”:[{“匹配”:{“名称”:“伊万”}}],
“应该”:[{“术语”:{“名称”:{“值”:“ji”,“提升”:10 }}}]}}}
除了term查询,支持boost的查询还有很多,比如prefix
query、match
query。您可以在某些情况下使用它。以下是一些官方示例:http ://www.elasticsearch.org/guide/en/elasticsearch/guide/current/_boosting_query_clauses.html
提升对于控制分数可能并不容易,因为它需要标准化。您可以使用function_score
查询指定分数来指定直接分数:如果您需要更直接的控制,这确实是一个有用的查询。
简而言之,您可以将查询包装在 bool 中并为名称匹配添加一些提升,如下所示:
{ "query" : {
"bool" : {
"must": [
{"filtered" : {
"filter" : {
"geo_distance" : {
"distance" : "2000km",
"loc" : {
"lat" : 10,
"lon" : 10
}
}
}
}}],
"should" : [ { "term" : { "name": { "value" : "ivan", "boost" : 10 }}}]}},
"sort" : [
"_score",
{
"_geo_distance" : {
"loc" : [10, 10],
"order" : "asc",
"unit" : "km",
"mode" : "min",
"distance_type" : "sloppy_arc"
}
}
]
}
更详细的可以查看我的 gist https://gist.github.com/hxuanji/e5acd9a5174ea10c08b8。我提升了“伊万”的名字。结果,“ivan”文档成为第一个而不是 (10,10) 文档。