在此问题中, 有一个功能要求,要求使用可选种子进行订购,以允许随机订购。
我需要能够对随机排序的结果进行分页。用Elasticsearch 0.19.1怎么做?
谢谢。
您可以使用唯一字段(例如id)和随机盐的哈希函数进行排序。根据结果的真实程度,您可以执行以下原始操作:
{ "query" : { "query_string" : {"query" : "*:*"} }, "sort" : { "_script" : { "script" : "(doc['_id'].value + salt).hashCode()", "type" : "number", "params" : { "salt" : "some_random_string" }, "order" : "asc" } } }
或像
{ "query" : { "query_string" : {"query" : "*:*"} }, "sort" : { "_script" : { "script" : "org.elasticsearch.common.Digest.md5Hex(doc['_id'].value + salt)", "type" : "string", "params" : { "salt" : "some_random_string" }, "order" : "asc" } } }
第二个示例将产生更多随机结果,但速度会稍慢。
为了使这种方法起作用_id,必须存储字段。否则,查询将失败NullPointerException。
_id
NullPointerException