elasticsearch 打分精度

elasticsearch 原文

What Is Relevance?edit

We’ve mentioned that, by default, results are returned in descending order of relevance. But what is relevance? How is it calculated?

The relevance score of each document is represented by a positive floating-point number called the _score. The higher the _score, the more relevant the document.

所以,elasticsearch中分数是 浮点类型的 。

IEEE 754

这里就不细说什么是IEEE 754了,就直接讲具体内容,有兴趣的可以自己百度。

float

符号位(S):1bit  指数位(E):8bit  尾数位(M):23bit

float的尾数:23位,其范围为:0~223,而223=8388608,所以float的精度为6~7位,能保证6位为绝对精确,7位一般也是正确的,8位就不一定了(但不是说8位就绝对不对了)

那为什么elasticsearch 要用float呢,看了一下源代码 FiltersFunctionFactorScorer 类

看到computeScore 还是double 类型的,但是 return scoreCombiner.combine 却变成了float,

继续看

可见,进行了强转,那如果要修改为double 该如何操作呢,FiltersFunctionFactorScorer 继承了FilterScorer

而FilterScorer 的包为org.apache.lucene.search,可见是因为lucene 的打分是float,所以elasticsearch 的打分也只能是float,谁让elasticsearch 是基于lucene 的呢。所以你如果要修改分数为double类型,最根源还是要修改lucene 的源代码。网上有人对lucene 做了一个patch,但还没有尝试。地址为:https://issues.apache.org/jira/browse/LUCENE-5596。

我目前用的elasticsearch 的版本是2.3.5, 或许后续的版本会修复这个问题。

所以如果打分因子范围过亿,恭喜你,分数已经已经不准了。

时间: 2024-11-10 04:35:16

elasticsearch 打分精度的相关文章

elasticsearch 打分插件

插件常用命令 ./plugin list/remove/install 目录结构 plugin.xml 代码 <?xml version="1.0"?> <assembly>     <id>plugin</id>     <formats>         <format>zip</format>     </formats>     <includeBaseDirectory>

elasticsearch相关性打分背后的理论

说明:elasticsearch查询结果是根据什么排序的呢?答案是根据相关性得分的高低来排序,本篇着重说明elasticsearch打分机制背后的理论. 主要是翻译自elasticsearch官方文档,官方文档地址如下: 相关性打分背后的理论:https://www.elastic.co/guide/en/elasticsearch/guide/current/scoring-theory.html 相关性打分权重修正图解:https://www.elastic.co/guide/en/elas

ES搜索社区

好问题 1.比如我要索引的条目为"33分钟侦探",我想在用户输入"3"."33"."三三"."三十三"."三十三分钟"等的情况下都命中该条目,请问有没有什么好的方式实现? PS:使用的是ansj分词器 https://elasticsearch.cn/question/1812 2.elasticsearch打分优化 1.比如搜索"感冒",有如下2个标题:1,&quo

Elasticsearch function_score 打分源代码跟踪

类注册器 IndicesModule private void registerBuiltinQueryParsers() { registerQueryParser(MatchQueryParser.class); registerQueryParser(MultiMatchQueryParser.class); registerQueryParser(NestedQueryParser.class); registerQueryParser(HasChildQueryParser.class

elasticsearch 自定义打分

curl -XGET 'http://localhost:9200/searchsuggestion/searchsuggestion/_search?pretty' -d '{ "fields" : ["company_full_name","id"], "size" : 10, "query": { "function_score": { "functions":

Elasticsearch基础知识

ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎.能够达到实时搜索,稳定,可靠,快速,安装使用方便. 我们建立一个网站或应用程序,并要添加搜索功能,令我们受打击的是:搜索工作是很难的.我们希望我们的搜索解决方案要快,我们希望有一个零配置和一个完全 免费的搜索模式,我们希望能够简单地使用JSON通

ElasticSearch笔记整理(三):Java API使用与ES中文分词

[TOC] pom.xml 使用maven工程构建ES Java API的测试项目,其用到的依赖如下: <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>2.3.0</version> </dependency> <dependency> <grou

实战ELK(9) Elasticsearch地理位置

地理坐标点(geo-point) 是指地球表面可以用经纬度描述的一个点.地理坐标点可以用来计算两个坐标位置间的距离,或者判断一个点是否在一个区域中.地理坐标点不能被动态映射(dynamic mapping)自动检测,而是需要显式声明对应字段类型为 geo_point . PUT /attractions { "mappings": { "restaurant": { "properties": { "name": { &quo

Elasticsearch 知识点整理 一

极力推荐: 官网地址: https://www.elastic.co/guide/en/elasticsearch/reference/6.0 肺腑之言,学ES先学原生的语法,SpringData封装的是太好用了,但是没玩过原生的语法,可能不知道Spring提供的API在干什么 核心概念: Near Realtime (NRT) 在ES中进行搜索是近实时的,意思是数据从写入ES到可以被searchable仅仅需要1秒钟,因此说基于ES执行的搜索和分析可以达到秒级 Cluster 集群 , 集群是