elasticsearch 查询以从弹性搜索中的前100个项目中随机获取n个项目
我需要在elasticsearch中编写一个查询,以获得前100个排序项目中的随机12个项目 我尝试过类似的方法,但我无法随机获得12项(我只能获得前12项) 我使用的查询:elasticsearch 查询以从弹性搜索中的前100个项目中随机获取n个项目,elasticsearch,kibana,elasticsearch,Kibana,我需要在elasticsearch中编写一个查询,以获得前100个排序项目中的随机12个项目 我尝试过类似的方法,但我无法随机获得12项(我只能获得前12项) 我使用的查询: GET product/_search { "sort": [ { "DateAdded": { "order": "desc" } } ], "query": { "function_score": { "query": {
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个元素,则可以;)(因为返回到应用程序的数据很大)。