elasticsearch 查询以从弹性搜索中的前100个项目中随机获取n个项目,elasticsearch,kibana,elasticsearch,Kibana" /> elasticsearch 查询以从弹性搜索中的前100个项目中随机获取n个项目,elasticsearch,kibana,elasticsearch,Kibana" />

elasticsearch 查询以从弹性搜索中的前100个项目中随机获取n个项目

elasticsearch 查询以从弹性搜索中的前100个项目中随机获取n个项目,elasticsearch,kibana,elasticsearch,Kibana,我需要在elasticsearch中编写一个查询,以获得前100个排序项目中的随机12个项目 我尝试过类似的方法,但我无法随机获得12项(我只能获得前12项) 我使用的查询: GET product/_search { "sort": [ { "DateAdded": { "order": "desc" } } ], "query": { "function_score": { "query": {

我需要在elasticsearch中编写一个查询,以获得前100个排序项目中的随机12个项目

我尝试过类似的方法,但我无法随机获得12项(我只能获得前12项)

我使用的查询:

GET product/_search
{
  "sort": [
    {
      "DateAdded": {
        "order": "desc"
      }
    }
  ],
  "query": {
    "function_score": {
      "query": {
        "bool": {
          "must": [
            {
              "term": {
                "definitionName": {
                  "value": "ABC"
                }
              }
            },
            {
              "range": {
                "price": {
                  "gt": 0
                }
              }
            }
          ]
        }
      },
      "functions": [
        {
          "random_score": {
            "seed": 314159265359
          }
        }
      ]
    }
  },
  "size": 12
}
谁能告诉我哪里出了问题?(我是写弹性疑问句的初学者)


提前感谢。

编辑:不起作用,窗口大小重新计算X top结果的分数。 也: 需要在顶层将“跟踪分数”设置为true。 corect语法是:

"rescore": {
    "window_size": 10,
    "query": {
      "score_mode": "max", //wathever
      "rescore_query": {
        "bool": {
          "should": [
            {
              //your query here - you can use a function or a script score too
            }
          ]
        }
      },
      "query_weight": 0.7,
      "rescore_query_weight": 1.2
    }
  }
好的,我更明白

实际上,您必须按日期(前100名)排序,并使用随机函数(read)重新存储

应该是这样的:

{
  "sort": [
    {
      "DateAdded": {
        "order": "desc"
      }
    }
  ],
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "definitionName": {
              "value": "ABC"
            }
          }
        },
        {
          "range": {
            "price": {
              "gt": 0
            }
          }
        }
      ]
    }
  },
  "size": 100,
  "rescore": {
    "window_size": 12,
    "query": {
      "rescore_query": {
        "random_score": {
          "seed": 314159265359
        }
      }
    }
  }
}

“sort”:[{“DateAdded”:{“order”:“desc”}]=>如果您想使用随机计算的分数,您需要删除此项(或查询{u分数”:{“order”:“desc”}})。删除代码“sort”:[{“DateAdded”:{“order”:“desc”}时,如何对结果进行排序。是否有其他排序方法?当我尝试使用此代码时,出现错误“[query]无法解析字段[rescore_query]”好吧,我的坏,窗口大小将只重新计算X最高分,因此,如果您可以在其中随机得分,所有100将在响应中返回。我认为您必须在应用程序端执行此操作。我编辑响应。应该可以使用脚本筛选器(在postfilter部分)实现此操作,但速度会非常慢。如果只需要返回15个元素而不是100个元素,则不值得。如果需要返回10个元素而不是10000个元素,则可以;)(因为返回到应用程序的数据很大)。