我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何理解Elasticsearch倒排索引与分词

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何理解Elasticsearch倒排索引与分词

本篇内容主要讲解“如何理解Elasticsearch倒排索引与分词”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解Elasticsearch倒排索引与分词”吧!

1 倒排索引

1.1 书的目录和索引

正排索引即目录页,根据页码去找内容

如何理解Elasticsearch倒排索引与分词

倒排索引即索引页,根据关键词去找对应页码

如何理解Elasticsearch倒排索引与分词

1.2 搜索引擎

  • 正排索引

        文档Id =》文档内容、单词的关联关系

  • 倒排索引

         单词 =》 文档Id的关联关系

  • 左:正排索引 =》 右:倒排索引

如何理解Elasticsearch倒排索引与分词

倒排索引查询流程

查询包含"搜索引擎”的文档

  1. 通过倒排索引获得"搜索引擎”对应的文档Id有1和3

  2. 通过正排索引查询1和3的完整内容

  3. 返回最终结果

1.3 倒排索引的组成

1.3.1 单词词典( Term Dictionary )

倒排索引的重要组成

  • 记录所有文档的单词 ,一般都比较大

  • 记录单词到倒排列表的关联信息

单词字典的实现一般是用B+ Tree ,示例如下

如何理解Elasticsearch倒排索引与分词

1.3.2 倒排列表( Posting List )

记录了单词对应的文档集合,由倒排索引项( Posting )组成。

倒排索引项( Posting )主要包含如下信息:

  • 文档Id ,用于获取原始信息

  • 单词频率( TF, Term Frequency ),记录该单词在该文档中的出现次数,用于后续相关性算分

  • 位置( Position)

  • 记录单词在文档中的分词位置(多个) , 用于做词语搜索( Phrase Query )

  • 偏移( Offset )

记录单词在文档的开始和结束位置,用于做高亮显示

案例

以搜索引擎为例

如何理解Elasticsearch倒排索引与分词

单词字典与倒排列表整合在一起的结构

如何理解Elasticsearch倒排索引与分词

ES存储的是JSON格式文档,其中包含多个字段,每个字段都有自己的倒排索引。

2 分词

将文本转换成一系列单词的过程,也称文本分析,在 ES 里称为 Analysis。

2.1 Analyzer-分词器

分词器是 ES 专门处理分词的组件,组成如下:

2.1.1 Character Filters

在Tokenizer之前对原始文本进行处理,比如增加、删除或替换字符等。

针对原始文本进行处理,比如去除 html 特殊标记符,自带的如下:

  • HTML Strip 去除 html 标签和转换 html 实体

  • Mapping 进行字符替换操作

  • Pattern Replace 进行正则匹配替换

会影响后续tokenizer解析的postion和offset信息

如何理解Elasticsearch倒排索引与分词

2.1.2 Tokenizer

将原始文本按照一定规则切分为单词,内置:

  • standard 按单词进行分割

  • letter 按非字符类进行分割

  • whitespace 按空格进行分割

  • UAX URL Email 按 standard 分割,但不会分割邮箱和 url

  • NGram 和 Edge NGram 连词分割

  • Path Hierachy 按文件路径进行分割

示例:

POST _analyze{ "tokenizer":"path_hierarchy", "text":"/one/two/three"}

如何理解Elasticsearch倒排索引与分词

如何理解Elasticsearch倒排索引与分词

2.1.3 Token Filters

针对 tokenizer 处理的单词进行再加工,比如转小写、删除或新增等处理,内置:

  • lowercase 将所有 term 转换为小写

  • stop 删除 stop words

  • NGram 和 Edge NGram 连词分割

  • Synonym 添加近义词的 term

示例

// filter 可以有多个 POST _analyze {     "text":"a Hello world!",     "tokenizer":"standard",     "filter":[     "stop", // 把 a 去掉了     "lowercase",// 小写     {         "type":"ngram",         "min_gram":"4",         "max_gram":"4"     }     ] } // 得到 hell、ello、worl、orld

 如何理解Elasticsearch倒排索引与分词

分词器的调用顺序

如何理解Elasticsearch倒排索引与分词

3 Analyze API

ES 提供了一个测试分词的 API 接口,方便验证分词效果,endpoint 是 _analyze:

3.1 指定 analyzer

request

POST _analyze {     "analyzer":"standard", # 分词器     "text":" JavaEdge 公众号" # 测试文本 }

response

{   "tokens" : [     {       "token" : "java", # 分词结果       "start_offset" : 1, # 起始偏移       "end_offset" : 5, # 结束偏移       "type" : "<ALPHANUM>",       "position" : 0 # 分词位置     },     {       "token" : "edge",       "start_offset" : 6,       "end_offset" : 10,       "type" : "<ALPHANUM>",       "position" : 1     }   ] }

 如何理解Elasticsearch倒排索引与分词

3.2 指定索引中的字段

POST  测试的索引/_analyze   {     "field":"username", # 测试字段     "text":"hello world" # 测试文本 }

  如何理解Elasticsearch倒排索引与分词

3.3 自定义分词器

POST _analyze {     "tokenizer":"standard",     "filter":["lowercase"], # 自定义     "text":"hello world" }

之前的默认分词器大写

 如何理解Elasticsearch倒排索引与分词

自定义小写分词器

如何理解Elasticsearch倒排索引与分词

4 内置分词器

Standard Analyzer

默认分词器,按词切分,支持多语言,小写处理

Simple Analyzer

按照非字母切分,小写处理

如何理解Elasticsearch倒排索引与分词

Whitespace Analyzer

按空格切分

如何理解Elasticsearch倒排索引与分词

Stop Analyzer

Stop Word 指语气助词等修饰性词语,比如 the、an、的、这等等,特性是相比 Simple Analyzer 多 Stop Word  处理

  如何理解Elasticsearch倒排索引与分词

keyword Analyzer

不分词,直接将输入作为一个单词输出

 如何理解Elasticsearch倒排索引与分词

Pattern Analyzer

通过正则表达式自定义分隔符,默认 \W+,即非字词的符号为分隔符

如何理解Elasticsearch倒排索引与分词

Language Analyzer

提供了 30+ 常见语言的分词器

5 中文分词

将一个汉字序列切分成一个个单独的词。在英文中,单词之间是以空格作为自然分界符,汉语中词没有一个形式上的分界符。而且中文博大精深,上下文不同,分词结果也大不相同。

比如:

  • 乒乓球拍/卖/完了

  • 乒乓球/拍卖/完了

以下是 ES 中常见的分词系统:

IK

实现中英文单词的切分,可自定义词库,支持热更新分词词典

jieba

python 中最流行饿分词系统,支持分词和词性标注,支持繁体分词,自定义词典,并行分词

以下是基于自然语言处理的分词系统:

Hanlp

由一系列模型与算法组成的 java 工具包,支持索引分词、繁体分词、简单匹配分词(极速模式)、基于 CRF 模型的分词、N-  最短路径分词等,实现了不少经典分词方法。目标是普及自然语言处理在生产环境中的应用。

https://github.com/hankcs/HanLP

THULAC

  • THU Lexical Analyzer for Chinese ,由清华大学自然语言处理与社会人文计算

         实验室研制推出的一套中文词法分析工具包,具有中文分词和词性标注功能

          https://github.com/microbun/elasticsearch-thulac-plugin

6 自定义分词器

当自带的分词无法满足需求时,可以自定义分词器,通过定义 Character Filters、Tokenizer、Token Filter  实现。自定义的分词需要在索引的配置中设定,示例如下所示:

自定义如下分词器

如何理解Elasticsearch倒排索引与分词
// 自定义分词器 PUT test_index_name {   "settings":{      "analysis":{       "analyzer":{         "my_customer_analyzer":{           "type":"custome",           "tokenizer":"standard",           "char_filter":["html_strip"],           "filter":["lowercase", "asciifolding"]         }       }     }   } }  // 测试自定义分词器效果: POST test_index/_analyze {   "tokenizer":"keyword",   "char_filter":["html_strip"],   "text":"Is this <b>a box</b>?" }  // 得到 is、this、a、box

7 分词使用说明

分词会在如下两个时机使用:

创建或者更新文档时(Index Time)

会对相应的文档进行分词处理

索引时分词是通过配置Index Mapping中每个字段的analyzer属性实现的。不指定分词时,使用默认standard。

查询时(Search Time)

会对查询语句进行分词。查询时分词的指定方式:

  • 查询的时候通过analyzer指定分词器

  • 通过index mapping设置 search_analyzer 实现

分词的最佳实践

  • 明确字段是否需要分词,不需要分词的字段就将 type 设置为 keyword,可以节省空间和提高写性能。

  • 善用 _analyze API,查看文档的具体分词结果

  • 多动手测试

到此,相信大家对“如何理解Elasticsearch倒排索引与分词”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何理解Elasticsearch倒排索引与分词

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

搜索一文入门ElasticSearch(节点分片CRUD倒排索引分词)

这篇文章主要为大家介绍了搜索一文入门ElasticSearch(节点分片CRUD倒排索引分词)的基础详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-03-23

ElasticSearch节点、分片、CRUD、倒排索引和分词源码分析

这篇文章主要介绍了ElasticSearch节点、分片、CRUD、倒排索引和分词源码分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇ElasticSearch节点、分片、CRUD、倒排索引和分词源码分析文章都
2023-07-05

【漫画】ES原理 必知必会的倒排索引和分词

倒排索引的初衷倒排索引,它也是索引。索引,初衷都是为了快速检索到你要的数据。我相信你一定知道mysql的索引,如果对某一个字段加了索引,一般来说查询该字段速度是可以有显著的提升。每种数据库都有自己要解决的问题(或者说擅长的领域),对应的就有自己的数据结构,而不
【漫画】ES原理 必知必会的倒排索引和分词
2018-07-11

深入理解Elasticsearch的分布式索引机制(Elasticsearch分布式索引如何工作?)

Elasticsearch的分布式索引机制是一种高可用、可扩展且容错的数据管理方式。它使用分片将索引细分,并创建副本以提高数据可用性。主分片处理写入,副本分片处理读取。分片分配策略用于确定分片存储位置。路由机制确保文档始终路由到相同的分片,优化查询性能。合并有助于维护分片大小,提高性能并减少存储开销。通过分布式索引机制,Elasticsearch实现了高可用性、可伸缩性、故障容错性、并行处理和优化查询性能。
深入理解Elasticsearch的分布式索引机制(Elasticsearch分布式索引如何工作?)
2024-04-02

Elasticsearch分布式搜索中的近义词与模糊查询处理(Elasticsearch如何处理分布式搜索中的近义词和模糊查询?)

Elasticsearch通过同义词词库和编辑距离算法处理分布式搜索中的近义词和模糊查询。同义词词库扩展查询以包含相关术语,而模糊查询匹配相似术语,编辑距离为低。这在分布式群集中以本地方式执行,提供可扩展性、低延迟和一致性。此外,Elasticsearch提供拼写检查、自动完成、N-gram分词和自定义同义词词库等相关功能,以增强近义词和模糊查询处理,确保准确且相关的搜索结果。
Elasticsearch分布式搜索中的近义词与模糊查询处理(Elasticsearch如何处理分布式搜索中的近义词和模糊查询?)
2024-04-02

RiSearch PHP 如何解决中文分词与索引的关联问题

引言:RiSearch是一款功能强大的PHP全文搜索引擎,能够高效地处理中文分词和索引问题。本文将介绍如何使用RiSearch解决中文分词与索引的关联问题,并提供具体的代码示例。一、中文分词中文分词是将连续的中文文本切分成一个个有意义的词语
2023-10-21

Elasticsearch分布式搜索引擎的架构原理与优势分析(Elasticsearch如何构建高效分布式搜索架构?)

Elasticsearch是一种分布式搜索引擎,采用分片、副本和集群架构。其原理涉及在分布式节点上存储和处理数据,使用分布式一致性机制保证数据完整性。Elasticsearch架构的优势包括可扩展性、故障容错、高可用性、高性能和数据一致性。它还支持跨数据中心复制、动态负载均衡和节点自我管理功能。
Elasticsearch分布式搜索引擎的架构原理与优势分析(Elasticsearch如何构建高效分布式搜索架构?)
2024-04-02

Elasticsearch分布式搜索中的滚动更新与索引重建(Elasticsearch如何进行滚动更新和索引重建?)

滚动更新和索引重建是Elasticsearch管理分布式搜索集群中的索引更改的两种策略。滚动更新涉及逐步更新索引分片,在更新过程中保持集群可用。它适用于需要无停机时间、可扩展性和可靠性的场景。索引重建涉及一次性创建和重建新索引。它更简单、更快,并确保数据一致性。但是,它会导致停机时间和数据丢失风险。选择最合适的策略取决于特定用例的需求,例如停机时间、可扩展性、可靠性、简单性、性能和数据一致性。
Elasticsearch分布式搜索中的滚动更新与索引重建(Elasticsearch如何进行滚动更新和索引重建?)
2024-04-02

Elasticsearch分布式搜索的自定义分词器与过滤器开发(如何为Elasticsearch开发自定义的分词器和过滤器?)

Elasticsearch自定义分词器和过滤器开发通过定义规则、选择类型和创建实现来构建。分词器以规则拆分文本,而过滤器按条件筛选文档。实践包括性能优化、可重用性和测试。部署后,管理涉及监控和更新。自定义分词器和过滤器增强了分布式搜索的准确性和效率。
Elasticsearch分布式搜索的自定义分词器与过滤器开发(如何为Elasticsearch开发自定义的分词器和过滤器?)
2024-04-02

Elasticsearch分布式搜索引擎的API使用与最佳实践(如何高效使用Elasticsearch分布式搜索引擎的API?)

Elasticsearch分布式搜索引擎API使用与最佳实践:索引设计:规范化数据并定义映射以优化索引和搜索。查询优化:使用过滤器缩小搜索范围,利用聚合进行数据分析。API使用:批量操作提高效率,异步搜索提升用户体验。其他最佳实践:使用筛选器代替查询,预计算字段,分片感知路由。这些最佳实践帮助最大化ElasticsearchAPI性能,构建高效的应用程序。
Elasticsearch分布式搜索引擎的API使用与最佳实践(如何高效使用Elasticsearch分布式搜索引擎的API?)
2024-04-02

Elasticsearch分布式搜索的映射与类型管理(Elasticsearch如何管理分布式搜索的映射和类型?)

Elasticsearch使用分布式索引模型管理大量数据,其中分片具有自己的映射和类型。映射定义文档结构,决定数据存储和索引方式。类型是映射的逻辑分组,允许在同一索引中存储不同结构的文档。Elasticsearch提供了管理映射和类型的工具和API,如索引API、映射API和类型API。最佳实践包括保持映射简单一致,使用类型进行逻辑分组和定期审查和优化映射。
Elasticsearch分布式搜索的映射与类型管理(Elasticsearch如何管理分布式搜索的映射和类型?)
2024-04-02

Elasticsearch分布式搜索引擎的安全与权限控制(如何保障Elasticsearch分布式搜索引擎的安全并进行权限控制?)

Elasticsearch安全与权限控制为保障Elasticsearch安全,需采取措施:密码管理:强密码、定期更改、使用不同密码访问Elasticsearch和Kibana。网络安全:身份验证和授权、TLS加密通信、限制端口访问、网络分段。用户权限控制:角色、特权、基于角色的访问控制(RBAC),最小特权原则。审计和监控:审计日志、监控工具,检测异常。数据加密:索引数据加密、加密密钥保护敏感数据。云安全性:身份和访问管理(IAM)、防火墙规则。权限控制机制:角色和特权定义用户操作权限。RBAC根据角色执
Elasticsearch分布式搜索引擎的安全与权限控制(如何保障Elasticsearch分布式搜索引擎的安全并进行权限控制?)
2024-04-02

Elasticsearch分布式搜索在云计算平台上的部署与管理(如何在云计算平台上部署和管理Elasticsearch分布式搜索引擎?)

Elasticsearch分布式搜索在云计算平台上的部署和管理涉及选择云提供商、创建集群、配置安全和网络。管理包括监控、备份、升级、容量规划和高可用性。云平台提供按需定价、自动化、集成和容器支持等特有功能。最佳实践包括选择合适实例类型、配置索引设置、启用副本、使用快照和实施安全措施。通过利用云计算平台的优势,组织可以高效部署和管理Elasticsearch集群,满足大数据搜索和分析的需求。
Elasticsearch分布式搜索在云计算平台上的部署与管理(如何在云计算平台上部署和管理Elasticsearch分布式搜索引擎?)
2024-04-02

Elasticsearch分布式搜索引擎的硬件选型与性能调优(Elasticsearch分布式搜索的硬件如何选择和性能如何调优?)

Elasticsearch分布式搜索引擎的硬件选型和性能调优硬件选型:选择高速CPU、充足内存、快速存储设备、高带宽网络。性能调优:优化索引设置、启用压缩、监控和调整、优化查询、使用缓存、调整分片分配。其他考虑因素:JVM调优、网络优化、定期维护。
Elasticsearch分布式搜索引擎的硬件选型与性能调优(Elasticsearch分布式搜索的硬件如何选择和性能如何调优?)
2024-04-02

Elasticsearch分布式搜索中的数据清理与过期策略(Elasticsearch如何处理分布式搜索中的数据清理和过期?)

Elasticsearch通过多种机制管理过期和不必要的数据。数据清理机制包括:删除策略(立即删除、保留策略、滚动索引、快照和还原)和过期文档(_ttl字段)。索引维护任务(刷新、合并、删除)定期执行以优化性能。过期策略包括TTL策略(根据_ttl字段删除过期文档)和生命周期策略(根据文档元数据执行操作)。删除集群策略允许删除不再需要的数据。实施最佳实践(定义保留时间、使用适当策略、监控索引健康、使用生命周期策略、进行备份)可优化数据清理和过期策略,保持索引的健康和性能。
Elasticsearch分布式搜索中的数据清理与过期策略(Elasticsearch如何处理分布式搜索中的数据清理和过期?)
2024-04-02

Elasticsearch分布式搜索的跨域查询与聚合处理(如何处理Elasticsearch分布式搜索中的跨域查询和聚合?)

Elasticsearch通过跨索引集群(CCS)支持跨域查询,使用CCR插件将索引复制到目标集群。跨域聚合也类似,但需要CCS插件。最佳实践包括使用单独索引、优化网络、使用管理工具和监控性能。跨域查询和聚合提供了对分布式数据的访问,但可能更昂贵且受网络延迟影响。
Elasticsearch分布式搜索的跨域查询与聚合处理(如何处理Elasticsearch分布式搜索中的跨域查询和聚合?)
2024-04-02

如何利用索引提升PHP与MySQL的排序和分组操作?

索引是一种在数据库表中创建的数据结构,用来提高查询操作的效率。在PHP和MySQL中,索引可以在排序和分组操作中发挥重要作用,提升数据库查询的性能。本文将介绍如何利用索引来优化PHP与MySQL的排序和分组操作,并提供具体的代码示例。排序操
2023-10-21

Elasticsearch分布式搜索引擎的插件开发与扩展(如何为Elasticsearch开发并扩展新的插件功能?)

Elasticsearch插件开发与扩展简介Elasticsearch是一个分布式搜索引擎,通过插件扩展和定制以满足特定需求。本文介绍如何开发和扩展Elasticsearch插件功能,包括插件架构、开发步骤、扩展功能类型、安装与管理,以及最佳实践。插件架构采用模块化设计,每个插件包含自己的元数据和扩展点。开发插件需实现扩展点,例如自定义分析器或查询处理器。插件可以扩展Elasticsearch功能,包括添加自定义分析器、增强查询处理、扩展聚合、添加自定义API和集成第三方库。开发时应遵守Elasticse
Elasticsearch分布式搜索引擎的插件开发与扩展(如何为Elasticsearch开发并扩展新的插件功能?)
2024-04-02

Elasticsearch分布式搜索引擎在知识图谱构建中的应用(如何利用Elasticsearch进行分布式知识图谱的构建与搜索?)

Elasticsearch作为分布式搜索引擎,在知识图谱构建中发挥关键作用,包括索引知识图谱数据、分布式索引、知识图谱构建和知识图谱搜索。其可扩展性、分布式特性、灵活的索引方案和强大的搜索功能使其成为构建语义丰富知识库的理想选择,应用于生物医学、金融、电子商务、自然语言处理和科学研究等广泛领域。
Elasticsearch分布式搜索引擎在知识图谱构建中的应用(如何利用Elasticsearch进行分布式知识图谱的构建与搜索?)
2024-04-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录