random_score的使用
在Elasticsearch中,random_score查询可以用来随机排序搜索结果,这对于实现诸如轮播、随机推荐等功能非常有用。
random_score的语法
bash
GET /<索引名>/_search
{
"query": {
"function_score": {
"query": { "match_all": {} }, // 或者你的查询条件
"random_score": {
"seed": 12345 // 设置一个种子值,相同的种子值会产生相同的随机顺序
}
}
}
}
random_score案例
场景
假设我们有一个商品索引,我们需要随机获取商品
索引创建
bash
PUT /products
{
"mappings": {
"properties": {
"product_id": {
"type": "keyword"
},
"category": {
"type": "keyword"
}
}
}
}
文档插入
bash
POST /products/_doc/
{
"product_id": "prod1",
"category": "electronics"
}
POST /products/_doc/
{
"product_id": "prod2",
"category": "clothing"
}
POST /products/_doc/
{
"product_id": "prod10",
"category": "books"
}
查询
如果你想每次查询都得到相同的随机顺序,可以指定一个种子值:
bash
GET /products/_search
{
"query": {
"function_score": {
"query": { "match_all": {} }, // 或者使用具体的查询条件
"random_score": {
"seed": 12345
}
}
}
}
不指定种子值:
bash
GET /products/_search
{
"query": {
"function_score": {
"query": { "match_all": {} }, // 或者使用具体的查询条件
"random_score": {}
}
}
}