首页 > 解决方案 > 如何在 elasticserch 查询中获得 3 个随机搜索结果

问题描述

我有我的弹性搜索查询,它返回发布日期范围之间的记录:

{
  query : {
    bool: {
      filter: [

      ],
      must: {
        range: {
          publishedDate: {
            gte: "2018-11-01",
            lte: "2019-03-30"
          }
        }
      }
    }
  }
  from: 0,
  size: 3,
}

每次发送此查询时,我都需要显示 3 个随机结果

弹性搜索文档中提到我可以发送一个种子来获得随机结果:

遵循文档后,我将查询更新为:

{
  "query" : {
    "bool": {
      "filter": [

      ],
      "must": {
        "range": {
          "publishedDate": {
            "gte": "2018-11-01",
            "lte": "2019-03-30"
          }
        }
      }
    },
    "function_score": {
      "functions": [
        {
          "random_score": {
            "seed": "123123123"
           }
        }
      ]
    }
  },
  "from": 0,
  "size": 3
}

但它不起作用(说查询格式错误),任何人都可以建议如何更正此查询以返回 3 个随机搜索结果。

标签: elasticsearchaws-elasticsearch

解决方案


如果您只需要返回随机结果,您可以将查询重组为类似于以下内容

{
  "query": {
    "function_score": {
      "query": {
        "range": {
          "publishedDate": {
            "gte": "2018-11-01",
            "lte": "2019-03-30"
          }
        }
      },
      "boost": "5",
      "random_score": {},
      "boost_mode": "multiply"
    }
  },
  "from": 0,
  "size": 3
}

从弹性文档修改 - https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html


推荐阅读