ElasticSearch 相关性】的更多相关文章

1.相关性 ElasticSearch检索结果是按照相关性倒序排列的,相关性是什么,相关性又是如何计算的?每个文档都有相关性评分,用一个正浮点数字段 _score 来表示 . _score 的评分越高,相关性越高. 查询语句会为每个文档生成一个 _score 字段.评分的计算方式取决于查询类型 不同的查询语句用于不同的目的: fuzzy 查询会计算与关键词的拼写相似程度 terms 查询会计算 找到的内容与关键词组成部分匹配的百分比 但是通常我们说的 relevance 是我们用来计算全文本字段…
在Elasticsearch全文检索中,我们用的比较多的就是Multi Match Query,其支持对多个字段进行匹配.Elasticsearch支持5种类型的Multi Match,我们一起来深入学习下它们的区别. 5种类型的Multi Match Query 直接从官网的文档上摘抄一段来: best_fields: (default) Finds documents which match any field, but uses the _score from the best field…
一.多shard场景下relevance score不准确问题     1.问题描述:            多个shard下,如果每个shard包含指定搜索条件的document数量不均匀的情况下,会导致在某个shard上document数量少的时候,计算该指定搜索条件的document的相关性评分要虚高.导致该document比实际真正想要返回的document的评分要高.     2.解决         (1)生产环境下,数据量大,尽可能实现均匀分配 数据量很大的话,其实一般情况下,在概…
转载:http://www.infoq.com/cn/articles/anatomy-of-an-elasticsearch-cluster-part03 近实时搜索 虽然Elasticsearch中的变更不能立即可见,它还是提供了一个近实时的搜索引擎.如前一篇中所述,提交Lucene的变更到磁盘是一个代价昂贵的操作.为了避免在文档对查询依然有效的时候,提交变更到磁盘,Elasticsearch在内存缓冲和磁盘之间提供了一个文件系统缓存.内存缓存(默认情况下)每1秒刷新一次,在文件系统缓存中使…
一.基于词项与全文的搜索 1.词项 Term(词项)是表达语意的最小单位,搜索和利用统计语言模型进行自然语言处理都需要处理Term. Term的使用说明: 1)Term Level Query:Term Query.Range Query.Exists Query.Prefix Query.Wildcard Query: 2)在ES中,对于Term查询的输入是不做分词处理的,会将输入作为一个整体,在倒排索引中查找准确的词项,并且使用相关度算分公式为每个包含该词项的文档进行相关度算分: 3)通过C…
一.多shard场景下relevance score不准确问题 1.问题描述: 多个shard下,如果每个shard包含指定搜索条件的document数量不均匀的情况下,会导致在某个shard上document数量少的时候,计算该指定搜索条件的document的相关性评分要虚高.导致该document比实际真正想要返回的document的评分要高. 2.解决 (1)生产环境下,数据量大,尽可能实现均匀分配 数据量很大的话,其实一般情况下,在概率学的背景下,es都是在多个shard中均匀路由数据的…
转载自:https://elasticstack.blog.csdn.net/article/details/114278163 在许多的情况下,我们使用现有的分词器已经足够满足我们许多的业务需求,但是也有许多的情况,我们需要定制一个特定的分词器来满足我们特定的需求.我们知道要实现全文搜索,在文档被导入到 Elasticsearch 后,每个字段都需要被分析.这里就涉及到分词.如果你对分词器还不是很了解的话,那么请参考我之前的文章 "Elasticsearch: analyzer".…
从第一章翻译Elasticsearch官方指南Controlling Relevance一章. 控制相关度(Controlling Relevance) 对于仅处理结构化数据(比方日期.数值和字符枚举值)的数据库,它们仅仅须要检查一份文档(在关系数据库中是一行)是否匹配查询就可以. 虽然布尔类型的YES|NO匹配也是全文搜索的一个必要组成.它们本身是不够的.我们还须要知道每份文档和查询之间的相关程度.全文搜索引擎不仅要找到匹配的文档,还须要依据相关度对它们进行排序. 全文搜索相关度的公式,或者被…
1.标准查询 query match _all query:"搜索字符串" operator:or 2.多匹配查询+区分权重 query multi_match "query":"搜索字符串" fields:["title^100","text^10","-all"]        针对字段进行加权 3.引入短语查询 query bool must multi_match "q…
之前我们所有的查询都属于命令行查询,但是不利于复杂的查询,而且一般在项目开发中不使用命令行查询方式,只有在调试测试时使用简单命令行查询,但是,如果想要善用搜索,我们必须使用请求体查询(request body search)API.之所以这么称呼,是因为大多数的参数以JSON格式所容纳而非查询字符串.请求体查询,并不仅仅用来处理查询,而且还可以高亮返回结果中的片段,并且给出帮助你的用户找寻最好结果的相关数据建议. 空查询 我们以最简单的search API开始,空查询将会返回索引中所有的文档.…