Elasticsearch排序以及自定义评分的所有方法

本文介绍了Elasticsearch的排序机制,包括默认使用Lucene的评分系统,以及在5.0以下版本的搜索前评分。讨论了查询时的四种搜索类型:QUERY_THEN_FETCH, QUERY_AND_FEATCH, DFS_QUERY_THEN_FEATCH和DFS_QUERY_AND_FEATCH,分析了分布式搜索的scatter/gather过程以及由此产生的数量和排名问题。DFS查询方式通过预收集词频率和文档频率来提高搜索精度,但牺牲了性能。" 102823579,7713699,Ubuntu 18.04 编译Linux 3.8.13 内核问题解决,"['Linux内核开发', 'Ubuntu', 'GCC编译器', '软件编译']
摘要由CSDN通过智能技术生成

1.elasticsearch相关性评分,默认使用lucene内置评分系统,公式大致如下:

在这里插入图片描述

lucene的评分机制 https://www.cnblogs.com/yjf512/p/4860134.html

2.elasticsearch5.0以下支持搜索前评分,具体位置忘记了。//todo

现在推荐在查询的时候评分。

3.查询时候评分有哪些方式:

1.term boost
2.function_score:包含script_function和score_function_filter
3.score_mode和boostmodel:score_mode定义的是如何将各个function的分值合并成一个综合的分值; boost_mode则定义如何将这个综合的分值作用在原始query产生的分值上。
4.重写排序算法。//todo

4.分布式排序

es在查询时,可以指定搜索类型为QUERY_THEN_FETCH,QUERY_AND_FEATCH,DFS_QUERY_THEN_FEATCH和DFS_QUERY_AND_FEATCH。那么这4种搜索类型有什么区别?

分布式搜索背景介绍:
ES天生就是为分布式而生,但分布式有分布式的缺点。比如要搜索某个单词,但是数据却分别在5个分片(

在Java中,可以使用Elasticsearch提供的Script来编写自定义排序的脚本。以下是一个示例Java脚本,实现按照_score和age字段进行加权排序: ```java import org.elasticsearch.script.Script; import org.elasticsearch.script.ScriptType; import org.elasticsearch.search.sort.ScriptSortBuilder; import org.elasticsearch.search.sort.SortOrder; Script script = new Script( ScriptType.INLINE, "painless", "_score * 0.7 + doc['age'].value * 0.3", null); ScriptSortBuilder scriptSortBuilder = new ScriptSortBuilder(script, ScriptSortBuilder.ScriptSortType.NUMBER); scriptSortBuilder.order(SortOrder.DESC); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.query(QueryBuilders.matchAllQuery()); searchSourceBuilder.sort(scriptSortBuilder); SearchRequest searchRequest = new SearchRequest("my_index"); searchRequest.source(searchSourceBuilder); SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); ``` 在上面的示例中,我们使用了Painless脚本语言来编写自定义排序的脚本,将_score和age字段进行了加权排序。并且通过ScriptSortBuilder将脚本排序应用到搜索请求中,并执行搜索请求,最后将结果存储在searchResponse中。 需要注意的是,在使用脚本排序时,需要在Elasticsearch中启用脚本评分功能,可以通过设置"script.max_compilations_per_minute"参数来实现。此外,如果要使用其他脚本语言,可以修改ScriptType和脚本内容来实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值