我有一些重复字段的数据。我不希望重复项一起显示在搜索结果的顶部,但我不想完全消除它们。我只想获得更好的变化,因此相同的字段值的第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
}'
(基于this)
如果我们假设搜索受到重要性的提升,“Apple”搜索的自然结果将是John
,John
,Sam
。我要找的是一种方法来制作结果John
,Sam
,John
,即惩罚第二个John
,因为另一个John
已经出现。
答案 0 :(得分:3)
您可以通过查找所有重复项并选择其中一个重复项来“更重要”来调整索引时的重要性字段 - 也许选择具有最高分数的副本。从您的示例中,我将为现有的重要值添加5000。
结果现在排名如下。
John / Apple-7000,Sam / Apple-5000,John / Apple-1000
但这意味着如果您决定将5000更改为10000以调整得分,则需要重新编制索引,因为它取决于重要性的大小。
或者,您可以添加另一个名为“权限”的字段,您可以为重要性最高的副本指定值1,并使用评分函数在查询时提供步骤: -
"script_score": {
"script": "(_score * 5000) + doc['importance'].value + (doc['authority'].value * 5000)"
}
请注意,_score的乘数取决于原始排名算法,这假设_score的值为0.0到1.0