Elasticsearch 中文分词器 IK 的安装与使用

本文介绍了如何在Elasticsearch中安装IK分词器以支持中文全文检索。首先,通过在各节点解压并分发安装包来部署IK插件,然后创建索引并配置IK_max_word分词器,接着验证分词效果,并插入测试数据。最后,通过配置远程热词更新,确保能处理网络热词。整个过程详细阐述了Elasticsearch中文分词的实现步骤。
摘要由CSDN通过智能技术生成

前言

本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和文献引用请见1000个问题搞定大数据技术体系

正文

ES默认对英文文本的分词器支持较好,但和lucene一样,如果需要对中文进行全文检索,那么需要使用中文分词器,同lucene一样,在使用中文全文检索前,需要集成IK分词器。

那么我们接下来就来安装IK分词器,以实现中文的分词

第一步:三台机器安装IK分词器

  1. 将安装包上传到node01机器的/home/es路径下

安装包 CSDN 地址

  1. 将ik分词器的插件,解压到对应路径下
cd /opt/bigdata/soft
mkdir -p /opt/bigdata/install/elasticsearch-6.7.0/plugins/analysis-ik
unzip elasticsearch-analysis-ik-6.7.0.zip  -d /opt/bigdata/install/elasticsearch-6.7.0/plugins/analysis-ik/
  1. 将安装包分发到其他机器上,node01机器执行以下命令进行安装包的分发
cd /opt/bigdata/install/elasticsearch-6.7.0/plugins 
scp -r analysis-ik/ node02:$PWD 
scp -r analysis-ik/ node03:$PWD
  1. 三台机器都配置完成,配置完成之后,需要重启服务。

三台机器执行以下命令停止es服务并重启es服务

ps -ef|grep elasticsearch | grep bootstrap | awk '{print $2}' |xargs kill -9
nohup /opt/bigdata/install/elasticsearch-6.7.0/bin/elasticsearch 2>&1 &

第二步、创建索引库并配置IK分词器

delete iktest
PUT /iktest?pretty
{
    "settings" : {
        "analysis" : {
            "analyzer" : {
                "ik" : {
                    "tokenizer" : "ik_max_word"
                }
            }
        }
    },
    "mappings" : {
        "article" : {
            "dynamic" : true,
            "properties" : {
                "subject" : {
                    "type" : "text",
                    "analyzer" : "ik_max_word"
                }
            }
        }
    }
}

说明:在创建索引库的时候,我们指定分词方式为ik_max_word,会对我们的中文进行最细粒度的切分

第三步、查看分词效果

在kibana当中执行以下查询,并验证分词效果

  GET _analyze?pretty
  {
    "analyzer": "ik_max_word",
    "text": "拜登是美国总统"
  }

第四步、插入测试数据

POST /iktest/article/_bulk?pretty
{ "index" : { "_id" : "1" } }
{"subject" : ""闺蜜"崔顺实被韩检方传唤 韩总统府促彻查真相" }
{ "index" : { "_id" : "2" } }
{"subject" : "韩举行"护国训练" 青瓦台:决不许国家安全出问题" }
{ "index" : { "_id" : "3" } }
{"subject" : "媒体称FBI已经取得搜查令 检视希拉里电邮" }
{ "index" : { "_id" : "4" } }
{"subject" : "村上春树获安徒生奖 演讲中谈及欧洲排外问题" }
{ "index" : { "_id" : "5" } }
{"subject" : "希拉里团队炮轰FBI 参院民主党领袖批其”违法”" }

查看分词器

对"希拉里和韩国"进行分词查询

ikmaxword分词后的效果:希|拉|里|希拉里|和|韩国

POST /iktest/article/_search?pretty
{
    "query" : { "match" : { "subject" : "希拉里和韩国" }},
    "highlight" : {
        "pre_tags" : ["<font color=red>"],
        "post_tags" : ["</font>"],
        "fields" : {
            "subject" : {}
        }
    }
}

第五步、配置热词更新

查看分词效果

  GET _analyze?pretty
  {
    "analyzer": "ik_max_word",
    "text": "小老弟,你怎么肥事,老铁你来了!!!"
  }

WHY?

我们会发现,随着时间的推移和发展,有些网络热词我们并不能进行分词,因为网络热词并没有定义在我们的词库里面,这就需要我们经常能够实时的更新我们的网络热词,我们可以通过tomcat来实现远程词库来解决这个问题。

1、node03配置Tomcat

使用hadoop用户来进行配置tomcat,此处我们将tomcat装在node03机器上面即可,将我们的tomcat安装包上传到node03服务器的/opt/bigdata/soft路径下,然后进行解压

cd /opt/bigdata/soft/
tar -zxf apache-tomcat-8.5.34.tar.gz -C /opt/bigdata/install/

tomcat当中添加配置hot.dic

cd /opt/bigdata/install/apache-tomcat-8.5.34/webapps/ROOT
vi hot.dic 

老铁
肥事

启动tomcat

cd /opt/bigdata/install/apache-tomcat-8.5.34/
bin/startup.sh

浏览器访问以验证tomcat是否安装成功

wget http://node03:8080/hot.dic

如果能够访问到,则证明tomcat安装成功

2、 三台机器修改配置文件

三台机器都要修改es的配置文件(使用es用户来进行修改即可)
第一台机器node01修改es的配置

cd /opt/bigdata/install/elasticsearch-6.7.0/plugins/analysis-ik/config
vim IKAnalyzer.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
        <comment>IK Analyzer 扩展配置</comment>
        <!--用户可以在这里配置自己的扩展字典 -->
        <entry key="ext_dict"></entry>
         <!--用户可以在这里配置自己的扩展停止词字典-->
        <entry key="ext_stopwords"></entry>
        <!--用户可以在这里配置远程扩展字典 -->
        <entry key="remote_ext_dict">http://node03:8080/hot.dic</entry>
        <!--用户可以在这里配置远程扩展停止词字典-->
        <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

修改完成之后拷贝到node02与node03机器上面去
node01执行以下命令进行拷贝

cd /opt/bigdata/install/elasticsearch-6.7.0/plugins/analysis-ik/config 
scp IKAnalyzer.cfg.xml  node02:$PWD 
scp IKAnalyzer.cfg.xml  node03:$PWD 

3、三台机器重新启动es

三台机器重新启动es服务,三台机器先使用kill -9杀死es的服务,然后再执行以下命令进行重启

ps -ef|grep elasticsearch | grep bootstrap | awk '{print $2}' |xargs kill -9
nohup /opt/bigdata/install/elasticsearch-6.7.0/bin/elasticsearch 2>&1 &

在kibana当中执行以下命令,查看我们的分词过程

  GET _analyze?pretty
  {
    "analyzer": "ik_max_word",
    "text": "小老弟,你怎么肥事,老铁你来了"
  }
### 回答1: Lucene 5.5是一个开源的Java搜索引擎库,用于文本分析、索引和搜索。在Lucene中,分词器(Tokenizer)是用于将输入文本按照特定规则切分成单词(token)的工具。 Lucene 5.5提供了多种分词器,常用的有标准分词器(StandardTokenizer)、简单分词器(SimpleAnalyzer)、关键字分词器(KeywordAnalyzer)等。这些分词器在应用场景和切分规则上有所不同,用户可以根据需求选择合适的分词器。 标准分词器是Lucene中最常用的分词器之一,它通过去除空格、标点符号等特殊字符,将输入文本切分成一系列单词。这个过程叫做词法分析(tokenizing)。标准分词器还提供了一些附加的文本处理功能,例如将单词转换为小写(lowercasing)、去除停用词(stopwords)等。 简单分词器是一个基本的分词器,它将输入文本用空格切分成单词,并将单词转换为小写。这个分词器在某些简单的搜索场景中会有一定的使用价值。 关键字分词器则是将整个输入文本当作一个单词进行处理,适用于某些特殊的搜索需求。例如,当用户输入一个关键字作为搜索条件时,关键字分词器可以直接将整个关键字当作一个单词进行匹配。 除了以上提到的分词器,Lucene还提供了其他各种特定场景下的分词器,例如CJK分词器适用于中日韩文本的分词,Whitespace分词器将输入文本按照空格进行切分等等。 总结来说,Lucene 5.5提供了多种分词器供用户选择,根据不同的文本分析需求和搜索场景,选择合适的分词器可以提高搜索的效果和准确性。 ### 回答2: Lucene 5.5 是一款开源的全文搜索引擎库,其中的分词器是其核心组件之一。分词器用于将输入的文本进行切分,生成词条列表,以便进行索引和搜索。 Lucene 5.5 提供了多种分词器,常用的有标准分词器(StandardAnalyzer)和中文智能分词器(SmartChineseAnalyzer)。 标准分词器是最常用的分词器之一,它基于语法规则对文本进行切分,以空格、标点符号等作为分隔符。它能够处理英文等非中文文本,但对于中文文本效果不佳,因为中文没有明确的分隔符。 中文智能分词器是专门针对中文文本设计的分词器,它不仅考虑了语法规则,还结合了汉字之间的概率关联关系对文本进行切分。通过对大量的中文语料进行训练,智能分词器可以较好地解决中文分词中的歧义性问题,提升分词的准确性和效果。 除了以上两种分词器,Lucene 5.5 还提供了其他一些适用于特定场景的分词器,如关键字分词器(KeywordAnalyzer)和简单分词器(SimpleAnalyzer)。用户也可以根据自己的需求自定义分词器,通过实现接口来自定义词汇的切分规则。 总之,Lucene 5.5 分词器是一系列能够对文本进行切分的工具,包括了多种分词算法和规则,以满足不同场景下的需求。通过合理选择和应用分词器,可以提高全文搜索引擎的准确性和效率,为用户提供更好的搜索体验。 ### 回答3: Lucene 5.5 是一个开源的全文搜索引擎库,其中包含了许多功能强大的分词器。 在Lucene 5.5中,分词器是用于将文本分成单个的词语或词元的组件。这对于搜索引擎的索引构建和查询处理非常重要。在Lucene中,我们可以使用不同类型的分词器来满足不同的需求。 Lucene 5.5提供了许多内置的分词器。其中最常用的是StandardAnalyzer,它是基于标准英语规则的分词器,它可以将文本分成单词,并过滤掉一些常见的停用词。此外,还有KeywordAnalyzer,它将文本视为一个整体,不对其进行分词。另外还有SimpleAnalyzer,它将文本按照非字母字符进行分割,并将其小写化。还有WhitespaceAnalyzer,它将文本按照空格进行分割。 除了这些内置的分词器,Lucene 5.5还支持自定义的分词器。开发人员可以根据自己的需求实现自己的分词器。自定义分词器需要实现TokenStream接口,该接口定义了文本分词后的词元流。 通过使用Lucene 5.5的分词器,我们可以将待搜索的文本分成单个的词语或词元,从而提高搜索的准确性和效率。分词器是搜索引擎中一个非常关键的组件,它的质量和性能直接影响着整个搜索过程的效果。因此,了解和选择适合的分词器是非常重要的。
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值