Elasticsearch shuffle索引排序

时间:2014-02-15 18:47:29

标签: sorting lucene elasticsearch shuffle

提前致谢。我首先暴露了这种情况,最后是解决方案。

我有一组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只是用于排序结果,而不是完整的索引。如果我找不到解决方案,我会随机选择文档并将它们编入索引。

谢谢。

1 个答案:

答案 0 :(得分:0)

我使用以下搜索解决了它:

{  
    "from":STARTING_POSITION_NUMBER,
    "size":15,
    "query" : {
        "function_score": {
           "random_score": {
            "seed" : 1
           }
        }    
    }
}

感谢Elasticsearch邮件列表中的David用随机评分指出功能得分。