ES:倒排索引、分词详解(转载)

转载地址:https://blog.csdn.net/jiaojiao521765146514/article/details/83750548

一,倒排索引(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,查看文档的分词结果

---------------------

作者:焦焦^_^

来源:CSDN

原文:https://blog.csdn.net/jiaojiao521765146514/article/details/83750548

版权声明:本文为博主原创文章,转载请附上博文链接!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352