ElasticSearch全文检索__ElasticSearch 索引模块

网友投稿 863 2022-05-30

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":"老司机"}'

搜索引擎 全文检索 Elasticsearch

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:CSE 支持spring 4/5 以及spring boot 1/2 maven组件依赖关系配置参考
下一篇:js 模块化基础和模块规范AMD、CMD、ES6模块
相关文章