Elasticsearch中的分词介绍

1、概述 
在我们初次使用Elasticsearch查询的时候,有时会很困惑,为什么我存储的一段String数据,却查询不到?为什么输入了汉语单词,只能一个字一个字的匹配?等这些都与是否分词、使用什么分词器有关。

1.1 分词概念 
首先说说什么是分词器吧! 比如“分词介绍”: 
如果是标准分词器,会把它拆分成“分”,“词”,“介”,“绍”。 
如果使用一些汉语的分词器,则会分析成“分词”,“介绍”。

由于倒排索引都是以词term为索引的,因此如果分解成了一个一个的词,查询“分词”的时候,分词也会被分解成“分”,“词”,这样就可能误查到”中文分词“等之类的词。

1.2 关于String类型——分词与不分词 
在Elasticsearch中String是最基本的数据类型,如果不是数字或者标准格式的日期等这种很明显的类型,其他的一般都会优先默认存储成String。我们这里使用ik中文分词。

2、安装中文分词ik 
Elasticsearch的中文分词很烂,所以我们需要安装ik中文分词。首先可以从github上下载项目(https://github.com/medcl/elasticsearch-analysis-ik/),解压之后打成jar包,将jar包复制到Elasticsearch的plugins/目录下,再把解压出的ik目录(配置和词典等),复制到Elasticsearch的config 目录下。然后编辑配置文件elasticsearch.yml,在后面加:

index.analysis.analyzer.default.type: ik
  •  

重启elasticsearch搞定。

3、查看ElasticSearch的分词 
3.1 集群级分词的定义 
集群级的分词定义是在conf目录下的elasticsearch.yml文件里定义,内容大致如下:

index.analysis.analyzer.ik.type : "ik"
  •  

3.2 特定index的分词 
3.2.1 在定义analyze之前,先关闭index。其实并不需要关闭也可以生效,但是为了数据一致性考虑,还是先执行关闭。

curl -XPOST http://localhost:9400/index_test/_close
  •  

然后执行:

curl -XPUT localhost:9400/index_test/_settings -d '
{
   "analysis": {
      "analyzer":{
             "ikAnalyzer":{
                 "type":"org.elasticsearch.index.analysis.IkAnalyzerProvider",
                    "alias":"ik"
                }
            }
     }
}'

最后打开index:

curl -XPOST http://localhost:9400/index_test/_open
  •  

到此为止一个新的类型的分词器就定义好了。

4、分词对于查询的影响 
4.1 对于分词的字段 
(1)如果查询的是单个词,则查询到包含它的文档,返回结果与匹配程度有关 
(2)如果查询的是多个词即一段能被分析的词,比如hello world。那么查询的结果是包含分析得出的词的文档,包含hello或world的全部文档。

4.2 对于不分词的字段 
只有查询的是目标字段的精确值,才能匹配。比如hello world,必须查询hello world,才可以找到文档。

转载于:https://my.oschina.net/weiweiblog/blog/1574433

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值