其实,有很多方法可以“控制”得分。在索引之前,如果您已经有一些文档是为了获得高分/提升。索引前可以给特殊文档打高分,请参考here。
如果在索引之前无法确定boost,可以在查询命令中boost。关于 boosting 查询,也有很多选项,这取决于您使用的查询类型。
查询字符串查询:
您可以提升某些字段,例如fields" : ["content", "name.*^5"],或提升某些查询命令,例如quick^2 fox(这可能对您有用,只是额外提升名称)。
对于其他人:
你可以给term查询加boost,比如boosting "ivan" case:
"term" : {"name" : {"value" : "ivan","boost" : 10.0}}
您可以将其包装成 bool 查询并提升所需的情况。前任。查找所有“ivan”,在名称字段中提升“ji”。
{“查询”:{“布尔”:{“必须”:[{“匹配”:{“名称”:“伊万”}}],
“应该”:[{“术语”:{“名称”:{“价值”:“ji”,“提升”:10 }}}]}}}
除了term查询,支持boost的查询还有很多,比如prefix查询,match查询。您可以在某些情况下使用它。下面是一些官方的例子: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"
}
}
]
}
更详细的可以查看我的要点https://gist.github.com/hxuanji/e5acd9a5174ea10c08b8。我提升了“伊万”的名字。结果,“ivan”文档成为第一个文档,而不是 (10,10) 文档。