首页 > 解决方案 > ES如何多次随机查询而不重复结果?

问题描述

弹性搜索 5.0 版

我有要求随机查询多次用户信息,但最终结果不能有重复数据。

例如,

第一个随机查询结果

用户 0 用户 1 用户 2

第二次随机查询结果

用户 0 用户 3 用户 4

User0 是重复的。

这是我的随机查询,我该如何修改?

{
  "size" : 10,
  "query" : {
    "match_all" : {
      "boost" : 1.0
    }
  },
  "_source" : {
    "includes" : [

    ],
    "excludes" : [ ]
  },
  "sort" : [
      {
      "_script" : {
        "script" : {
          "inline" : "Math.random()",
          "lang" : "painless"
        },
        "type" : "number",
        "order" : "asc"
      }
    }
  ],
  "ext" : { }
}

标签: elasticsearch

解决方案


您可以使用bool must_not查询和id查询来删除先前检索到的文档的 id。

{
  "query": {
    "match_all": {
      "boost": 1.0
    },
    "bool": {
      "must_not": [
        {
          "ids": {
            "values": [The set of previous Ids]
          }
        }
      ]
    }
  },
  ...
}


推荐阅读