ElasticStack学习(五):ElasticSearch索引与分词
一、正排索引与倒排索引
1、什么是正排索引呢?
以一本书为例,一般在书的开始都会有书的目录,目录里面列举了一本书有哪些章节,大概有哪些内容,以及所对应的页码数。这样,我们在查找一些内容时,就可以通过目录来定位到这些内容大概在哪页。因此,书的目录就可以称之为正排索引(目录页)。
2、什么时倒排索引呢?
还是以一本书为例,在有些书的最后,会有以词为单位的列表,指明了相应的词分别出现在了哪些页中,而这样的列表就称之为倒排索引(索引页)。
3、两者在搜索引擎中的对比
正排索引:文档ID到文档内容和单词的关联;
倒排索引:单词到文档ID的关联;
如下表所示:
| 文档ID | 文档内容 |
| 1 | mastering elasticsearch |
| 2 | elasticsearch server |
| 3 | elasticsearch stack |
| 单词 | 出现次数 | 文档ID:出现位置 |
| mastering | 1 | 1:0 |
| elasticsearch | 3 | 1:1,2:0,3:0 |
| server | 1 | 2:1 |
| stack | 1 | 3:1 |
上述两表就是正排索引与倒排索引的简单结构说明。
4、倒排索引的组成
倒排索引由两部分组成:
1)单词词典:它记录了所有文档的单词,同时记录了单词到倒排列表的关联关系。单词词典一般比较大,可以通过B+树或哈希拉链法实现,以满足高性能的插入与查询。
2)倒排列表:它记录单词所对应的文档组合体,主要是由倒排索引项组成的。
倒排索引项的内容包括:
a)文档ID;
b)词频(Term Frequency),代表单词在文档中出现的次数,用于相关性打分;
c)位置(Position),表示单词在文档中分词的位置,用于语句搜索;
d)偏移(Offset),记录单词开始和结束位置,用于实现高亮显示;
二、分词与分词器
1、分词:文本分析就是把全文转换成一系列单词(term/token)的过程,也叫做分词。
2、分词器:分词是通过分词器来实现的,它是专门处理分词的组件。可以使用ElasticSearch内置的分词器,也可以按需定制化分词器。
因此,除了在数据写入时用分词器转换词条,在匹配查询语句时,也需要用相同的分词器对查询语句进行分析。
分词器由三部分组成:
1)Character Filters:它的主要作用是对原始文本进行处理,例如去除HTML标签;
2)Tokenizer:主要作用是按照规则来切分单词;
3)Token Filter:将切分好的单词进行加工,例如:小写转换、删除停用词、增加同义词;
ElasticSearch内置了如下分词器:
1)Standard Analyzer:默认分词器,按词切分,转小写处理;

2)Simple Analyzer:按照非字母切分(符号被过滤),转小写处理;

3)Stop Analyzer:停用词过滤(is/a/the),转小写处理;

4)WhiteSpace Analyzer:按照空格切分,转小写处理;

5)Keyword Analyzer:直接将输入当作输出,不分词;

6)Pattern Analyzer:正则表达式分词,默认\W+(非字符分隔);

7)Language:提供了30多种常见语言的分词器;

8)Custom Analyzer:自定义分词器;
3、中文分词
1)我们采用analysis-icu插件进行中文分词,可通过命令行:ElasticSearch-plugin install analysis-icu来安装此插件。该插件提供了Unicode支持,可以更好的支持亚洲语言。如下图所示:

2)社区中还有其他很好的分词器,如下:
a)IK:支持自定义词库,支持热更新分词字典;下载地址:https://github.com/medcl/elasticsearch-analysis-ik
b)THULAC:THU Lexucal Analyzer for Chinese,由清华大学自然语言处理和社会人文计算实验器出的一套中文分词器;下载地址:https://github.com/microbun/elasticsearch-thulac-plugin
大家可关注我的公众号

知识学习来源:《Elasticsearch核心技术与实战》
ElasticStack学习(五):ElasticSearch索引与分词的更多相关文章
- ES3:ElasticSearch 索引
ElasticSearch是文档型数据库,索引(Index)定义了文档的逻辑存储和字段类型,每个索引可以包含多个文档类型,文档类型是文档的集合,文档以索引定义的逻辑存储模型,比如,指定分片和副本的数量 ...
- 沉淀再出发:ElasticSearch的中文分词器ik
沉淀再出发:ElasticSearch的中文分词器ik 一.前言 为什么要在elasticsearch中要使用ik这样的中文分词呢,那是因为es提供的分词是英文分词,对于中文的分词就做的非常不好了 ...
- elasticsearch索引和映射
目录 1. elasticsearch如何实现搜索 1.1 搜索实例 1.2 es中数据的类型 1.3 倒排索引 1.4 分析与分析器 1.4.1 什么是分析器 1.4.2 内置分析器种类 1.4.3 ...
- 为 Elasticsearch 添加中文分词,对比分词器效果
转自:http://keenwon.com/1404.html 为 Elasticsearch 添加中文分词,对比分词器效果 Posted in 后端 By KeenWon On 2014年12月12 ...
- Elasticsearch之中文分词器插件es-ik的自定义热更新词库
不多说,直接上干货! 欢迎大家,关注微信扫码并加入我的4个微信公众号: 大数据躺过的坑 Java从入门到架构师 人工智能躺过的坑 Java全栈大联盟 ...
- Elasticsearch索引(company)_Centos下CURL增删改
目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 1.Elasticsearch索引说明 a. 通过上面几篇博客已经将Elastics ...
- 为Elasticsearch添加中文分词,对比分词器效果
http://keenwon.com/1404.html Elasticsearch中,内置了很多分词器(analyzers),例如standard (标准分词器).english(英文分词)和chi ...
- 为Elasticsearch添加中文分词
Elasticsearch的中文分词很烂,所以我们需要安装ik.首先从github上下载项目,解压: cd /tmp wget https://github.com/medcl/elasticsear ...
- elasticsearch 索引优化
ES索引优化篇主要从两个方面解决问题,一是索引数据过程:二是检索过程. 索引数据过程我在上面几篇文章中有提到怎么创建索引和导入数据,但是大家可能会遇到索引数据比较慢的过程.其实明白索引的原理就可以有 ...
随机推荐
- SGI STL中内存池的实现
最近这两天研究了一下SGI STL中的内存池, 网上对于这一块的讲解很多, 但是要么讲的不完整, 要么讲的不够简单(至少对于我这样的初学者来讲是这样的...), 所以接下来我将把我对于对于SGI ST ...
- DataGrid自定义复选框
<DataGridTemplateColumn Header="选择" Width="Auto" > <!--列头模板--> <D ...
- JavaScript严格模式分析
简要:严格模式(strict mode)是JavaScript在ES5里面新增的编码模式,只要一行代码 就可开启,可谓 非常简单了,而它对于 我们的编码来说到底有什么不同呢? 一. 严格模式的目的? ...
- 解决手机提示TF卡受损需要格式化问题
昨晚因为上QQ FOR PAD后.关机.结果又杯具了.上次无意看到一个SD卡修复命令,收藏起来了.一试,还真管用.现把它写出来.分享给大家.以后出现SD卡受损,千万不要再格式化内存卡了.修复过程:1. ...
- 龙芯GO!龙芯平台上构建Go语言环境指南
龙芯软件生态系列——龙芯GO!龙芯平台上构建Go语言环境指南2016-07-05 龙芯中科1初识Go语言Go语言是Google公司于2009年正式推出的一款开源的编程语言,是由Robert Gries ...
- 我写的一个Qt 显示二维码( QR Code)的控件(可以去掉对 libpthread 的依赖,而且编译出的库文件可以在 vc2010 的release 模式下使用)
最近一个项目需要显示二维码,所以花了点时间(只用了一个晚上,写的很不完善),写了个显示二维码的控件.当然这个控件用到了些开源的代码,比如qrencode,所以我也打算把我的代码开源. 我的代码参考了 ...
- 值得推荐的C/C++框架和库(深度好文)
[本文系外部转贴,原文地址:http://www.cppblog.com/merlinfang/archive/2014/12/26/209311.html http://coolshell.info ...
- Qt的模态对话框和非模态对话框 经常使用setAttribute (Qt::WA_DeleteOnClose)
模态对话框就是指在子对话框弹出时,焦点被强行集中于该子对话框,子对话框不关闭,用户将无法操作其他的窗口.非模态相反,用户仍然可以操作其他的窗口,包括该子对话框的父对话框. 如果从线程角度来讲,模态对话 ...
- 浅谈stylus与sass的对比
all we konw , 这两个都是css的预编译工具,但虽然都是编译工具,但还是存在差别的,下面来讲讲其中的区别 1.变量 sass定义变量是以这种形式进行定义的$xxx:10;而stylus的定 ...
- 关于JDK和JRE的一些总结
一.关于JDK和JRE JDK (Java Development Kit)即java开发工具,包括JER及代码编译器(javac).文档注释器(JavaDoc).代码调试器(Java Debugge ...