我正在尝试使用Elastic Search NEST客户端获取随机记录。 有没有办法做到这一点?
答案 0 :(得分:3)
为了赞美@ pickypg的回答,以下是如何在NEST中使用function_score
函数撰写random_score
查询的示例:
client.Search<MyType>(s => s
.Query(q => q
.FunctionScore(fs => fs
.Query(fq => fq.MatchAll())
.RandomScore()
)
)
);
答案 1 :(得分:1)
ES 7.x
嵌套方式:
var result = _elastic.Search<dynamic>(s => s
.Query(q => q
.FunctionScore(fs => fs.Functions(f => f.RandomScore())
.Query(fq => fq.MatchAll()))));
原始查询方式:
GET index-name/_search
"size": 1,
"query": {
"function_score": {
"query" : { "match_all": {} },
"random_score": {}
}
}
}
答案 2 :(得分:0)
这更像是一个与NEST相关的Elasticsearch问题。考虑到这一点,您可以使用Elasticsearch中的random_score
function来执行此操作。 random_score
是Elasticsearch中可用的众多function_score
之一 - 包括脚本分数 - 并且可用于控制每个匹配文档的_score
。
相对于Elasticsearch的REST API
curl -XGET localhost:9200/your-index/your-type/_search -d '{
"query" : {
"function_score": {
"query": { "match_all": {} },
"random_score" : { }
}
},
"size" : 1
}'
您可以控制随机数生成器或使用的种子,您可以创建自己的随机函数分数。当前random_score
实现从索引(唯一标识符)加载_uid
字段,文档说明这些字段可能是内存密集的。