您可以尝试使用此查询-它结合了得分:
confidence和
boost_multiplier字段:
{ "query": { "function_score": { "query": { "bool": { "should": [{ "nested": {"path": "tags","score_mode": "sum","query": { "function_score": { "query": { "match": { "tags.tag": "landscape" } }, "field_value_factor": { "field": "tags.confidence", "factor": 1, "missing": 0 } }} } }] } }, "field_value_factor": { "field": "boost_multiplier", "factor": 1, "missing": 0 } } }}
当我搜索coast
字词时-它返回:
id=1
仅具有此术语的文档具有该术语,得分为"_score": 100.27469
。
当我搜索landscape
术语时-它返回两个文档:
id=2
得分为“ _score”的文档:85.83046id=1
得分为“ _score”的文档:59.7339
由于
id=2具有较高
confidence字段值的文档,其得分更高。
当我搜索coast landscape
术语时-它返回两个文档:
id=1
得分为“ _score”的文档:160.00859id=2
得分为“ _score”的文档:85.83046
尽管
id=2具有的文档具有较高的
confidence字段值,但是具有的文档
id=1具有匹配的单词,因此得分更高。通过更改
"factor":1参数的值,您可以决定
confidence应多少影响结果。boost_muliplier字段
当我为一个新文档建立索引时,会发生更有趣的事情:假设它与具有的文档几乎相同,
id=2但是我设置了
"boost_multiplier" :4和
"id": 3:
{ "created_at" : "2017-07-31T20:43:17-04:00", "description" : null, "height" : 4934, "id" : "3", "tags" : [ ... { "confidence" : 48.36547551196872, "tag" : "landscape" }, ... ], "width" : 4016, "color" : "#FEEBF9", "boost_multiplier" : 4}
使用
coast landscapeterm 运行相同的查询将返回三个文档:
id=3
得分为“ _score”的文档:360.02664id=1
得分为“ _score”的文档:182.09859id=2
得分为“ _score”的文档:90.00666
尽管的文档
id=3只有一个匹配的单词(
landscape),但其
boost_multiplier值大大提高了评分。在此处,
"factor":1您还可以使用决定该值应增加多少分值,并
"missing": 0确定如果没有索引该字段应发生什么。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)