提前致谢。我首先暴露了这种情况,最后是解决方案。
我有一组2M文档,其中包含以下映射:
{
"image": {
"properties": {
"timestamp": {
"type": "date",
"format": "dateOptionalTime"
},
"title": {
"type": "string"
},
"url": {
"type": "string"
}
}
}
}
我有一个网页,通过以下搜索对所有文档进行分页:
{
"from":STARTING_POSITION_NUMBER,
"size":15,
"sort" : [
{ "_id" : {"order" : "desc"}}
],
"query" : {
"match_all": {}
}
}
点击看起来像这样(请注意,_id值是url的哈希,以防止重复的文档):
{
"_index": "images",
"_type": "image",
"_id": "2a750a4817bd1600",
"_score": null,
"_source": {
"url": "http://test.test/test.jpg",
"timestamp": "2014-02-13T17:01:40.442307",
"title": "Test image!"
},
"sort": [
null
]
}
这非常有效。我唯一的问题是文档按时间顺序排序(最旧的文档出现在第一页,而最近的文档最后在最后一页上编入索引),但我希望它们以随机顺序出现。例如,第10页应始终显示相同的N个文档,但它们不必按日期排序。
我想通过哈希对所有文档进行排序,这是一种随机和确定的方式。我怎么能这样做?
我搜索了文档和排序api只是用于排序结果,而不是完整的索引。如果我找不到解决方案,我会随机选择文档并将它们编入索引。
谢谢。
答案 0 :(得分:0)
我使用以下搜索解决了它:
{
"from":STARTING_POSITION_NUMBER,
"size":15,
"query" : {
"function_score": {
"random_score": {
"seed" : 1
}
}
}
}
感谢Elasticsearch邮件列表中的David用随机评分指出功能得分。