一尘不染

随机顺序和分页Elasticsearch

elasticsearch

此问题中,
有一个功能要求,要求使用可选种子进行订购,以允许随机订购。

我需要能够对随机排序的结果进行分页。用Elasticsearch 0.19.1怎么做?

谢谢。


阅读 786

收藏
2020-06-22

共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

2020-06-22