ElasticSearch全文检索__ElasticSearch 索引模块
ElasticSearch 索引模块-正排索引
ElasticSearch 索引模块-倒排索引
ElasticSearch 索引模块-重要组成部分
索引分析模块Analyzer:
https://www.elastic.co/guide/en/elasticsearch/reference/5.x/analysis.html
1)分解器(Tokenizer) :
2)词元过滤器(token filters)
索引建立模块Indexer
1)在建立索引过程中,分析处理过的文档将被加入到索引列表。事实上,Lucene为此仅提供了一个非常简单的API,而后自行内生地完成了此过程的所有功能。
ElasticSearch 索引模块-索引过程(1)
ElasticSearch 索引模块-索引过程(2)
ElasticSearch 索引模块-索引过程(3)
ElasticSearch 索引模块-索引和搜索
ElasticSearch 索引模块-停用词
有些词在文本中出现的频率非常高,但是对文本所携带的信息基本不产生影响,这样的词我们称之为停用词。
英文
a、an、the、of and so on
http://www.ranks.nl/stopwords/chinese-stopwords
中文
的、了、着、是等标点符号
http://www.ranks.nl/stopwords
用法:
1)文本经过分词之后,停用词通常被过滤掉,不会被进行索引。
2)在检索的时候,用户的查询中如果含有停用词,检索系统也会将其过滤掉
优点:
1)排除停用词可以加快建立索引的速度,减小索引库文件的大小。
ElasticSearch 索引模块-中文分词器
单字分词:
比如:”我们是中国人”
效果:“我”“们”“是”“中”“国”“人”
二分法分词:
比如:”我们是中国人”
效果:“我们”“们是”“是中”“中国”“国人”
词库分词:
按某种算法构造词,然后去匹配已建好的词库集合,如果匹配到就切分出来成为词语。通常词库分词被认为是最理想的中文分词算法。
ElasticSearch 索引模块-常见的中文分词器
StandardAnalyzer(单字分词)
能够根据空格、符号、数字、字母、E-mail地址、IP地址以及中文字符的分析处理分割原始的文本信息。但中文文字没有完成中文分词的功能,只是按照单个的汉字进行了分割。
CJKAnalyzer(二分法)
专门用于中文文档处理的分析器,可以实现中文的多元切分和停用词过滤。
IKAnalyzer(词库分词)
当前比较流行中文分词器,对中文支持较好。属于第三方插件,需要安装
测试默认的分词对中文的支持:
curl -XPOST http://master:9200/djt/user/3/_update -d '{"doc":{"name":"我们是中国人,xxx是我们的"}}'
curl -XPOST 'http://master:9200/djt/user/_search' -d '{"query" : { "match" : { "name" : "中国人" }}}'
ElasticSearch 索引模块-集成IK中文分词插件
下载ES的IK插件:
https://github.com/medcl/elasticsearch-analysis-ik
使用maven对下载的插件进行源码编译
mvn clean package –DskipTests
拷贝和解压release下的文件: target/releases/elasticsearch-analysis-ik-*.zip 到你的 elasticsearch 插件目录:ES_HOME/plugins/ik
重启ElasticSearch服务
测试分词效果:
curl 'http://master:9200/djt/_analyze?analyzer=ik_max_word&pretty=true' -d
'{"text":"我们是中国人"}'
curl 'http://master:9200/djt/_analyze?analyzer=ik_smart&pretty=true' -d
'{"text":"我们是中国人"}'
ElasticSearch 索引模块-自定义IK词库:
创建自定义词库
首先在ik插件的config/custom目录下创建一个文件djt.dic,在文件中添加词语即可,每一个词语一行。
修改ik的配置文件IKAnalyzer.cfg.xml
将djt.dic添加到ik的配置文件中即可:
vi config/IKAnalyzer.cfg.xml
custom/mydict.dic;custom/single_word_low_freq.dic;custom/djt.dic;
重启ElasticSearch服务
测试分词效果:
curl 'http://master:9200/djt/_analyze?analyzer=ik_max_word&pretty=true' -d '{"text":"蓝瘦香菇"}'
curl 'http://master:9200/djt/_analyze?analyzer=ik_smart&pretty=true' -d '{"text":"蓝瘦香菇"}'
ElasticSearch 索引模块-热更新IK词库
部署http服务,安装tomcat
1)切换到
/home/hadoop/app/apache-tomcat-7.0.67/webapps/ROOT
2)新建热词文件
vi hot.dic
么么哒
3)需正常访问
http://192.168.2x.210:8080/hot.dic
修改ik插件的配置文件:
vi /home/hadoop/app/elasticsearch-2.4.0/plugins/ik/config/ik/IKAnalyzer.cfg.xml 添加如下内容:
http://192.168.20.21x:8080/hot.dic
分发修改后的配置到其他es节点
重启es,可以看到加载热词库
测试动态添加热词
对比添加热词之前和之后的变化
url 'http://master:9200/djt/_analyze?analyzer=ik_max_word&pretty=true' -d
'{"text":"老司机"}'
- 点赞
- 收藏
- 关注作者
评论(0)