【发布时间】:2016-03-17 04:46:13
【问题描述】:
我使用流行度完成了一个复杂的查询,以改进使用 Elasticsearch 的社交媒体文档的结果。 查询运行良好,排名靠前的结果始终以查询为中心并包含有趣的元素。
但是它有一个问题,对于某些查询,第一个结果都来自同一个用户。
如果在更高级别的文档中检索到同一用户,我想降分文档。通过这种方式,我希望结果更加多样化。
请注意,我不希望它们被删除,因为在某些情况下,查找同一用户的更多文档可能仍然很有趣,但我希望它们处于较低的位置。
任何人都可以提出一种使它工作的方法吗?
根据某些 cmets 的建议,我更新了我的查询(简化版):
query = {"function_score": {
"functions": [
{"gauss": {"createdAt":
{"origin": "now", "scale": "30d", "offset": "7d", "decay" :0.9 }
}},
{"gauss": {"shares.last.twitter_retweets_log":
{"origin": 4.52, "scale": 2.61, "decay" : 0.9}
}},
],
"query": {"bool":{"must":[
{"exists":{"field": "images"}},
{"multi_match":{"query": "foo boo", fields:["text", "link.title"]}}
]}},
"score_mode": "multiply"
}};
P.S:一些文件可能很有趣,因为他们谈论多样性,但我不知道如何申请:
【问题讨论】:
-
你能显示你的实际查询和你目前得到的一些结果吗?另外,描述您的用户的字段类型是什么(即字符串或数字)?
-
@Val 我在 elasticSearch 2.1 上使用函数分数查询。 user.id 是一个字符串。
-
您介意分享您的实际查询吗?
-
@Val 根据您的建议,我添加了它的简化版本。
-
谢谢。我将建议对用户使用
function_score和decay,但仅在您的用户ID 是数字的情况下,它不是。
标签: elasticsearch lucene search-engine elasticsearch-aggregation