综合排序:Function Score Query优化算分

DELETE blogs  
PUT /blogs/_doc/1
{
  "title":"About popularity",
  "content":"In this post we will talk about...",
  "votes":0
}

PUT /blogs/_doc/2
{
  "title":"About popularity",
  "content":"In this post we will talk about...",
  "votes":100
}
PUT /blogs/_doc/3 
{
  "title":"About popularity",
  "content":"In this post we will talk about...",
  "votes":1000000
}

POST /blogs/_search
{
  "query": {
    "function_score": {
      "query": {
        "multi_match": {
          "query": "popularity",
          "fields": ["title","content"]
        }
      },
      "field_value_factor": {
        "field": "votes",
        "modifier": "log1p",
        "factor": 0.1
      },
      "boost_mode": "sum",
      "max_boost": 3
    }
  }
}

POST /blogs/_search
{
  "query": {
    "function_score": {
    "random_score": {
      "seed": 888
    }
    }
  }
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用Java语言编写的elasticsearch function_score查询的示例代码,包含所有必要的语法: ```java import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.functionscore.FunctionScoreQueryBuilder; import org.elasticsearch.index.query.functionscore.ScoreFunctionBuilders; import org.elasticsearch.index.query.functionscore.script.ScriptScoreFunctionBuilder; import org.elasticsearch.search.SearchHits; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.sort.SortBuilders; import org.elasticsearch.search.sort.SortOrder; import java.io.IOException; public class FunctionScoreExample { public static void main(String[] args) throws IOException { // 创建一个搜索源构建器 SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); // 创建一个function_score查询构建器 FunctionScoreQueryBuilder functionScoreQueryBuilder = QueryBuilders.functionScoreQuery( QueryBuilders.matchAllQuery(), ScoreFunctionBuilders.randomFunction() ); // 设置查询权重 functionScoreQueryBuilder.boost(2.0f); // 创建一个排序构建器 sourceBuilder.sort(SortBuilders.fieldSort("timestamp").order(SortOrder.DESC)); // 将查询构建器添加到搜索源构建器中 sourceBuilder.query(functionScoreQueryBuilder); // 执行查询 SearchHits hits = ElasticsearchUtil.search("index_name", sourceBuilder); // 处理查询结果 for (SearchHit hit : hits.getHits()) { // 处理每个搜索结果 } } } ``` 其中,`ElasticsearchUtil`是一个自定义的工具类,用于与elasticsearch进行交互。在此示例中,我们使用`ScoreFunctionBuilders.randomFunction()`创建了一个随机评分函数,将其与`QueryBuilders.matchAllQuery()`组合使用来创建一个简单的function_score查询。我们还设置了查询权重和排序规则,并使用`ElasticsearchUtil`执行了查询。在实际使用中,您需要根据您的具体需求进行相应的调整和修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值