《深入理解ElasticSearch》——第3章 底层索引控制3.1 改变Apache Lucene的评分方式

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介:

本节书摘来自华章计算机《深入理解ElasticSearch》一书中的第3章,第3.1节,作者:[美] 拉斐尔·酷奇(Rafa Ku) 马雷克·罗戈任斯基(Marek Rogoziński)更多章节内容可以访问云栖社区“华章计算机”公众号查看。

第3章 底层索引控制

在上一章,我们了解了Apache Lucene如何为文档评分,什么是查询重写,如何利用ElasticSearch 0.90中的新特性,即二次评分来影响搜索返回文档的得分。同时我们也讨论了如何使用单个HTTP请求发送多个查询或准实时读取请求,以及如何对数据进行基于多值字段或嵌套文档的排序。除此之外,还介绍了如何使用数据更新 API以及如何通过使用过滤器优化查询。最后,我们介绍了如何通过使用过滤器和作用域来缩减或增加用于切面计算的文档数量。本章涵盖以下内容:

  • 如何使用不同的评分公式及其特性。
  • 如何使用不同的倒排表格式及其特性。
  • 如何处理准实时搜索、实时读取,以及搜索器重新打开之后发生的动作。
  • 深入理解多语言数据处理。
  • 配置搜索事务日志以满足应用需求,并查看它对部署的影响。
  • 段合并、各种索引合并策略和合并调度方式。

3.1 改变Apache Lucene的评分方式

自2012年Apache Lucene 4.0发布以后,用户便可以改变默认的基于TF/IDF的评分算法了,这是因为Lucene的API做了一些改变,使得用户能轻松地修改和扩展该评分公式。然而,这并不是Lucene在改变文档评分计算方面仅有的改进。Lucene 4.0提供了更多的相似度模型,从而允许我们采用不同的评分公式。本节中,我们将深入了解Lucene 4.0带来了哪些变化以及如何整合这些特性至ElasticSearch中。
3.1.1 可用的相似度模型
前面已经说过,Apache Lucene 4.0之前,除了最原始和默认的相似度模型以外,TF/IDF模型也是可用的。详细内容请参见2.1节。
而现在,又新增了以下三种相似度模型可供使用:
Okapi BM25模型:这是一种基于概率模型的相似度模型,可用于估算文档与给定查询匹配的概率。为了在ElasticSearch中使用它,你需要使用该模型的名字,BM25。一般来说,Okapi BM25模型在短文本文档上的效果最好,因为这种场景中重复词项对文档的总体得分损害较大。
随机偏离(Divergence from randomness)模型:这是一种基于同名概率模型的相似度模型。为了在ElasticSearch中使用它,你需要使用该模型的名字,DFR。一般来说,随机偏离模型在类似自然语言的文本上效果较好。
基于信息的(Information based)模型:这是最后一个新引入的相似度模型,与随机偏离模型类似。为了在ElasticSearch中使用它,你需要使用该模型的名字,IB。同样,IB模型也在类似自然语言的文本上拥有较好的效果。
前面提到的相似度模型所涉及的数学知识已经远远超出本书的讨论范围。如果想深入了解这些模型以及拓展相关知识,请参考http:// en.wikipedia.org/wiki/Okapi_BM25(Okapi BM25模型),以及http://terrier.org/docs/v3.5/dfr_description.html(随机偏离模型)。
3.1.2 为每字段配置相似度模型
自ElasticSearch 0.90以后,用户可以在映射中为每字段设置不同的相似度模型。例如,假设我们有下面这个映射,用于索引博客的回帖(该映射存储在posts_no_similarity.json文件中):


16a77035098db25c19906550422f6d1dd7cd2f6d

我们希望的是,在name字段和contents字段中使用BM25相似度模型。为了实现这个目的,我们需要扩展当前的字段定义,即添加similarity字段,并将该字段的值设置为相应的相似度模型的名字。修改后的映射(该映射存储在posts_similarity.json文件中)如下所示:


1dc31aac611e46a245cf3d40b2314239a1a3e7ea

以上更改就足够了,并不需要额外的信息。经过前面的处理,Apache Lucene将在搜索期在name字段和contents字段上使用BM25相似度模型来计算文档得分。
对于随机偏离模型和基于信息的相似度模型,我们需要配置一些额外属性,用于控制这些相似度模型的行为。相关知识后面会详细讲述。

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
1月前
|
存储 自然语言处理 BI
|
1月前
|
自然语言处理 大数据 应用服务中间件
大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务
大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务
63 5
|
1月前
|
存储 分布式计算 大数据
大数据-169 Elasticsearch 索引使用 与 架构概念 增删改查
大数据-169 Elasticsearch 索引使用 与 架构概念 增删改查
58 3
|
3月前
|
存储 API 数据库
检索服务elasticsearch索引(Index)
【8月更文挑战第23天】
66 6
|
11天前
|
存储 JSON 关系型数据库
Elasticsearch 索引
【11月更文挑战第3天】
29 4
|
22天前
|
测试技术 API 开发工具
ElasticSearch7.6.x 模板及滚动索引创建及注意事项
ElasticSearch7.6.x 模板及滚动索引创建及注意事项
37 8
|
1月前
|
存储 分布式计算 druid
大数据-155 Apache Druid 架构与原理详解 数据存储 索引服务 压缩机制
大数据-155 Apache Druid 架构与原理详解 数据存储 索引服务 压缩机制
53 3
|
2月前
|
JSON 自然语言处理 数据库
ElasticSearch基础1——索引和文档。Kibana,RestClient操作索引和文档+黑马旅游ES库导入
概念、ik分词器、倒排索引、索引和文档的增删改查、RestClient对索引和文档的增删改查
ElasticSearch基础1——索引和文档。Kibana,RestClient操作索引和文档+黑马旅游ES库导入
|
2月前
|
存储 搜索推荐 数据建模
Elasticsearch 的数据建模与索引设计
【9月更文第3天】Elasticsearch 是一个基于 Lucene 的搜索引擎,广泛应用于全文检索、数据分析等领域。为了确保 Elasticsearch 的高效运行,合理的数据建模和索引设计至关重要。本文将探讨如何为不同的应用场景设计高效的索引结构,并分享一些数据建模的最佳实践。
113 2
|
3月前
|
存储 搜索推荐 API
探究:Elasticsearch 文档的 _id 是 Lucene 的 docid 吗?
【8月更文挑战第31天】在深入探索Elasticsearch(简称ES)这一强大的搜索引擎时,了解其底层存储机制——特别是与Lucene的关系,对于优化查询性能、设计高效的数据模型至关重要。其中,一个常见且容易引发误解的问题便是:Elasticsearch中文档的_id字段是否直接等同于Lucene的docid?本文将通过图文并茂的方式,详细剖析这一问题,帮助读者理解两者之间的微妙关系。
83 0

推荐镜像

更多