2019独角兽企业重金招聘Python工程师标准>>>

一,倒排索引(Inverted Index)
ElasticSearch引擎把文档数据写入到倒排索引(Inverted Index)的数据结构中,倒排索引建立的是分词(Term)和文档(Document)之间的映射关系,在倒排索引中,数据是面向词(Term)而不是面向文档的。

一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,有一个包含它的文档列表
示例:
对以下三个文档去除停用词后构造倒排索引

倒排索引-查询过程

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

通过倒排索引获得“搜索引擎”对应的文档id列表,有1,3
通过正排索引查询1和3的完整内容
返回最终结果
倒排索引-组成

单词词典(Term Dictionary)
倒排列表(Posting List)
单词词典(Term Dictionary)
单词词典的实现一般用B+树,B+树构造的可视化过程网址:B+ Tree Visualization

倒排列表(Posting List)

倒排列表记录了单词对应的文档集合,有倒排索引项(Posting)组成
倒排索引项主要包含如下信息:
1.文档id用于获取原始信息
2.单词频率(TF,Term Frequency),记录该单词在该文档中出现的次数,用于后续相关性算分
3.位置(Posting),记录单词在文档中的分词位置(多个),用于做词语搜索(Phrase Query)
4.偏移(Offset),记录单词在文档的开始和结束位置,用于高亮显示

B+树内部结点存索引,叶子结点存数据,这里的 单词词典就是B+树索引,倒排列表就是数据,整合在一起后如下所示

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

倒排索引的结构

包含这个关键词的document list
包含这个关键词的所有document的数量:IDF(inverse document frequency)
这个关键词在每个document中出现的次数:TF(term frequency)
这个关键词在这个document中的次序
每个document的长度:length norm
包含这个关键词的所有document的平均长度
倒排索引不可变的好处

不需要锁,提升并发能力,避免锁的问题
数据不变,一直保存在os cache中,只要cache内存足够
filter cache一直驻留在内存,因为数据不变
可以压缩,节省cpu和io开销
二,分词
分词是将文本转换成一系列单词(Term or Token)的过程,也可以叫文本分析,在ES里面称为Analysis

分词器
分词器是ES中专门处理分词的组件,英文为Analyzer,它的组成如下:

Character Filters:针对原始文本进行处理,比如去除html标签
Tokenizer:将原始文本按照一定规则切分为单词
Token Filters:针对Tokenizer处理的单词进行再加工,比如转小写、删除或增新等处理
分词器调用顺序

Analyze API

预定义的分词器

Standard Analyzer
默认分词器
按词切分,支持多语言
小写处理
Simple Analyzer
按照非字母切分
小写处理
Whitespace Analyzer
空白字符作为分隔符
Stop Analyzer
相比Simple Analyzer多了去除请用词处理
停用词指语气助词等修饰性词语,如the, an, 的, 这等
Keyword Analyzer
不分词,直接将输入作为一个单词输出
Pattern Analyzer
通过正则表达式自定义分隔符
默认是\W+,即非字词的符号作为分隔符
Language Analyzer
提供了30+种常见语言的分词器
三,自定义分词
Character Filters

在Tokenizer之前对原始文本进行处理,比如增加、删除或替换字符等
自带的如下:
1.HTML Strip Character Filter:去除HTML标签和转换HTML实体
2.Mapping Character Filter:进行字符替换操作
3.Pattern Replace Character Filter:进行正则匹配替换
会影响后续tokenizer解析的position和offset信息

Tokenizers

将原始文本按照一定规则切分为单词(term or token)
自带的如下:
1.standard 按照单词进行分割
2.letter 按照非字符类进行分割
3.whitespace 按照空格进行分割
4.UAX URL Email 按照standard进行分割,但不会分割邮箱和URL
5.Ngram 和 Edge NGram 连词分割
6.Path Hierarchy 按照文件路径进行分割

Token Filters

对于tokenizer输出的单词(term)进行增加、删除、修改等操作
自带的如下:
1.lowercase 将所有term转为小写
2.stop 删除停用词
3.Ngram 和 Edge NGram 连词分割
4.Synonym 添加近义词的term

自定义分词
自定义分词需要在索引配置中设定 char_filter、tokenizer、filter、analyzer等

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

创建或更新文档时(Index Time),会对相应的文档进行分词处理
查询时(Search Time),会对查询语句进行分词
1.查询时通过analyzer指定分词器
2.通过index mapping设置search_analyzer实现
3.一般不需要特别指定查询时分词器,直接使用索引分词器即可,否则会出现无法匹配的情况
分词使用建议

明确字段是否需要分词,不需要分词的字段就将type设置为keyword,可以节省空间和提高写性能
善用_analyze API,查看文档的分词结果

转载于:https://my.oschina.net/weiweiblog/blog/3016107

ES:倒排索引、分词详解(02-28 - 03-04)相关推荐

  1. es基本语句详解 查询语句详解

    es基本语句详解 查询语句详解 声明 Rest风格 索引的基本操作 1. 创建一个索引 2. 查看索引 我们使用elasticsearch-head 3. 删除索引 其它命令 ==文档的基本操作(重点 ...

  2. 微信公众号 开发详解02【自动回复、发布文章、自定义菜单、3种链接跳转】

    [微信公众号--零基础全面系统教学] [P01-P07]微信公众号 开发详解01[目的.起名.准备工作.注册流程.后台功能] [P08-P12]微信公众号 开发详解02[自动回复.发布文章.自定义菜单 ...

  3. 基于双向BiLstm神经网络的中文分词详解及源码

    基于双向BiLstm神经网络的中文分词详解及源码 基于双向BiLstm神经网络的中文分词详解及源码 1 标注序列 2 训练网络 3 Viterbi算法求解最优路径 4 keras代码讲解 最后 源代码 ...

  4. 简单有效的多标准中文分词详解

    简单有效的多标准中文分词详解 本文介绍一种简洁优雅的多标准中文分词方案,可联合多个不同标准的语料库训练单个模型,同时输出多标准的分词结果.通过不同语料库之间的迁移学习提升模型的性能,在10个语料库上的 ...

  5. ES Module原理详解

    ES Module原理详解 一.ES Modules如何工作 流程简析 二.模块加载 1.构造 2.实例化 3.求值 总结 参考 ES Module 系列: ES Module使用详解 ES Modu ...

  6. ES倒排索引与分词详解

    倒排索引 正排索引:文档id到单词的关联关系 倒排索引:单词到文档id的关联关系 示例: 对以下三个文档去除停用词后构造倒排索引 image 倒排索引-查询过程 查询包含"搜索引擎" ...

  7. elasticsearch Analyzer 进行分词详解

    文章目录 1. Anaiysis 与 Analyzer 2. Analyzer 的组成 3. Elastocsearch 的内置分词器 3.1 使用 _analyzer Api 3.1.1 直接指定 ...

  8. 怎么修改服务器上的cpt文件,DELL-服务器-RAID-配置详解(28页)-原创力文档

    DELL 服务器 RAID 配置详解 磁盘阵列可以在安装系统之前或之后产生,系统会视之为一个(大型)硬盘,而它具有容 错及冗余的功能.磁盘阵列不单只可以加入一个现成的系统,它更可以支持容量扩展,方 法 ...

  9. 2021-IP地址详解02

    网络 域网:一般称为内网单局域网的构成:交换机,网线,PC()交换机:用来组件内网的局域网的设备 ip地址 ip地址就是一个唯一的标识,是一段网络编码(二进制)由32位构成11010010.01001 ...

最新文章

  1. web浏览器录音:web audio api
  2. cognos report在做同比时遇到的问题解决方法
  3. 基于python的测试报告自动化生成
  4. java中的事件派发机制_事件派发器模式
  5. canny edge_Canny Edge检测器简介
  6. 在vue中实现picker样式_vue mint-ui学习笔记之picker的使用
  7. 网易考拉向欧洲市场投入220亿,能掀起多大波澜?
  8. ofo给还在路上垂死挣扎的战友们留下什么启示?
  9. xvid编解码器安装
  10. 配置IDEA/创建springboot+maven项目
  11. 图片文字识别的方法有哪些?
  12. CC00024.NavigationLog——|Open网络2.4.9服务端/客户端部署/本地client配置/连接成功测试|
  13. win 7使用mimikatz实现MS14-068漏洞
  14. 10.高光反射Blinn
  15. 【改进模糊神经网络】基于粒子群-万有引力算法PSOGSA 改进的前馈神经网络研究(Matlab代码实现)
  16. Found duplicate column(s) when inserting into hdfs://nameservice1/origin_data/events_7/data: `dt`;
  17. mumu模拟器PUBG显示服务器,刺激战场使用MuMu模拟器最新的过检测方法
  18. Reliable Cloud Infrastructure: Design and Process学习笔记
  19. python3版本800行的代码_Python number.long_to_bytes方法代码示例
  20. Java源码分享——单机版五子棋

热门文章

  1. 公众号电商小程序运营方案
  2. Ubuntu 16.04 Vysor 破解 和黑屏问题解决+ 闪屏问题解决
  3. jsplumb 绘制线条颜色
  4. 1640_MIT 6.828 fork函数的功能以及相关代码分析
  5. eclipse中,add jars和add library的区别
  6. java 界面编程_JAVA图形界面编程
  7. mysql运行平台_各个平台的mysql重启命令
  8. Python小项目:实现日历功能
  9. 【shell案例】判断主机是否在线
  10. android极光推送成功率,记一次调用极光推送的惨痛经历