当前位置: 首页 > 面试题库 >

随机顺序和分页Elasticsearch

祁鸿晖
2023-03-14
问题内容

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

我需要能够对随机排序的结果进行分页。用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



 类似资料:
  • 我是Javascript新手——每次刷新页面时,我都会尝试以不同的顺序重新加载页面上的图像——这样每次访问都会有一个新的网站安排。 类似于这里所做的:pauljung.co.uk 这里使用的函数是MathRandom,它可以调整图像的大小,并在加载时将图像放置在不同的位置。但是,我想知道如何准确地将图像调用到页面的HTML主体上? 我尝试在主体中放置一个间隔gif,并将其链接到id=picture

  • 问题内容: 请参见下面的代码段 当我多次执行代码时,我会如下随机获得输出,有时System.out语句首先在控制台中打印,有时System.err首先打印。以下是我得到的随机输出 输出1 输出2 为什么会这样呢? 问题答案: 我相信这是因为您正在写入两个不同的输出(一个是标准输出,另一个是标准错误)。这些可能在运行时由两个不同的线程处理,以允许在Java执行期间同时写入两者。假设是这种情况,cpu

  • 我在生成XSRF令牌和更新必要的cookie值方面遇到了一些奇怪的行为。当我加载我的网站的登录页时——一个有角度的前端和一个Spring boot后端——会生成一个XSRF令牌。不是很理想,但如果这是正常的和预期的,那么我可以接受。进入登录页时生成的唯一请求是“获取”请求。 在我登录到应用程序之后,它验证第一个XSRF-TOKEN并验证其有效性,然后继续登录。但是,在更改web服务上的XSRF-t

  • 假设我有一个随机选择的项目池。 我使用一个简单的加权选择算法来做到这一点: 计算项目权重总和 在0和权重和之间选择一个随机数 迭代项目,并按项目权重减少,选择项目时 同时,约束传播算法更新可用项目池。 例如,假设我们有一个N乘N的网格,每个单元格可以选择一个数字 使用上述算法,通过加权选择完成选择 一旦一个单元选择了它的编号,它还会使用一些规则限制相邻单元的可用编号 我的问题是: 假设牢房A和B是

  • 问题内容: 我有一个HashMap,每次我获得迭代器时,我都希望以不同的随机顺序迭代它们的键值对。从概念上讲,我想在调用迭代器之前对地图进行“混洗”(或者,如果需要,可以对迭代器进行“混洗”)。 我有两种选择: 1)使用LinkedHashMap的方法,并在内部保留条目列表,将其随机洗净,并在调用迭代器时返回该视图。 2)使用map.entrySet(),构造一个ArrayList并在其上使用sh

  • 问题内容: 我想以随机顺序在CardLayout中显示卡片或屏幕。我需要有关如何完成此操作的指导。我应该使用什么策略? 我尝试使用下面的代码,但它的顺序固定。我希望能够选择我喜欢的任何顺序。 编辑! 抱歉,按我的意思随机排列并不是说改组。但是,很高兴知道。我希望程序的用户能够输入一些输入。根据输入的值,显示特定的屏幕/卡。 问题答案: 这是直接跳转到卡片的简单方法。 显然,这将需要对其余代码进行一