【发布时间】:2014-11-18 09:15:27
【问题描述】:
我正在尝试使用 Elastic Search NEST 客户端获取随机记录。 有没有办法做到这一点?
【问题讨论】:
标签: c# elasticsearch nest
我正在尝试使用 Elastic Search NEST 客户端获取随机记录。 有没有办法做到这一点?
【问题讨论】:
标签: c# elasticsearch nest
为了补充 @pickypg 的回答,这里有一个示例,说明如何在 NEST 中使用 random_score 函数编写 function_score 查询:
client.Search<MyType>(s => s
.Query(q => q
.FunctionScore(fs => fs
.Query(fq => fq.MatchAll())
.RandomScore()
)
)
);
【讨论】:
client.Search<MyType>(s => s .Query(q => q .FunctionScore(fs => fs .Query(fq => fq.MatchAll()) .Functions(f=>f .RandomScore( Guid.NewGuid().ToString() ) ) ) ) );
ES 7.x
NEST 方式:
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": {}
}
}
}
【讨论】:
这更像是一个 Elasticsearch 问题,而不是与 NEST 相关的问题。考虑到这一点,您可以在 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 字段,文档说明可能会占用大量内存。
【讨论】: