mah*_*off 8 duplicates elasticsearch
我有一些重复字段的数据.我不希望重复项一起显示在搜索结果的顶部,但我不想完全消除它们.我只想获得更好的变化,因此相同的字段值的第2,第3 ......第n次出现将被降级.ElasticSearch有可能吗?
例如:
curl -XPOST 'http://localhost:9200/employeeid/info/1' -d '{
"name": "John",
"organisation": "Apple",
"importance": 1000
}'
curl -XPOST 'http://localhost:9200/employeeid/info/2' -d '{
"name":"John",
"organisation":"Apple",
"importance": 2000
}'
curl -XPOST 'http://localhost:9200/employeeid/info/3' -d '{
"name": "Sam",
"organisation": "Apple",
"importance": 0
}'
Run Code Online (Sandbox Code Playgroud)
(基于此)
如果我们假设搜索由重要性提升,对于"苹果"的搜索自然结果将是John,John,Sam.我所寻找的是一个方法,使结果John,Sam,John,即惩罚第二John,因为另一个John已经出现.
您可以在索引时通过查找所有重复项并选择其中一个重复项“更重要”来调整重要性字段 - 也许会选择得分最高的重复项。根据您的示例,我将在现有的重要性值上添加 5000。
结果现在排名如下。
约翰/苹果-7000、山姆/苹果-5000、约翰/苹果-1000
但这意味着如果您决定将 5000 更改为 10000 来调整评分,则需要重新索引,因为这取决于重要性的大小。
或者,您可以添加另一个名为“authority”的字段,您可以为具有最高重要性的重复项赋予值 1,并使用评分函数在查询时提供一个步骤:-
"script_score": {
"script": "(_score * 5000) + doc['importance'].value + (doc['authority'].value * 5000)"
}
Run Code Online (Sandbox Code Playgroud)
请注意,_score 的乘数取决于原始排名算法,这假设 _score 的值从 0.0 到 1.0
| 归档时间: |
|
| 查看次数: |
116 次 |
| 最近记录: |