2014-02-15 60 views
0

在此先感谢。我首先揭示了这种情况,最后是解决方案。Elasticsearch洗牌索引排序

我有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

我解决它使用以下搜索:

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

感谢David从Elasticsearch邮件列表指出了功能评分随机得分。