Elasticsearch中ik_max_word和 ik_smart的区别

1、ik_max_word

会将文本做最细粒度的拆分,比如会将“中华人民共和国人民大会堂”拆分为“中华人民共和国、中华人民、中华、华人、人民共和国、人民、共和国、大会堂、大会、会堂等词语。

2、ik_smart
会做最粗粒度的拆分,比如会将“中华人民共和国人民大会堂”拆分为中华人民共和国、人民大会堂。
 

两种分词器使用的最佳实践是:索引时用ik_max_word,在搜索时用ik_smart
 


搜索时,输入“华为手机”,此时是想搜索出“华为手机”的商品,而不是华为其它的商品



此时使用ik_smart和ik_max_word都会将华为手机拆分为华为和手机两个词,那些只包括“华为”这个词的信息也被搜索出来了,我的目标是搜索只包含华为手机这个词的信息,这没有满足我的目标。


怎么解决呢?
我们可以将华为手机添加到自定义词库,

这样,因为华为手机是一个词,所以ik_smart不再细粒度分了

 



如果我想将包含华为 这个词的信息也搜索出来怎么办呢?
那就输入 “华为 华为手机”(注意华为后边有个空格),那就会将包含华为、华为手机的信息都搜索出来。


 

备注:

@Field(type=FieldType.Text, analyzer="ik_max_word")     表示该字段是一个文本,并作最大程度拆分,默认建立索引

@Field(type=FieldType.Text,index=false)             表示该字段是一个文本,不建立索引

@Field(type=FieldType.Date)                                表示该字段是一个文本,日期类型,默认不建立索引

@Field(type=FieldType.Long)                               表示该字段是一个长整型,默认建立索引

@Field(type=FieldType.Keyword)                         表示该字段内容是一个文本并作为一个整体不可分,默认建立索引

@Field(type=FieldType.Float)                               表示该字段内容是一个浮点类型并作为一个整体不可分,默认建立索引

 

date 、float、long都是不能够被拆分的


 

 

FR:徐海涛(hunk xu)
QQ技术交流群:386476712

你可能感兴趣的:(Eclipse)