elasticsearch中英文搜索在kibaba中使用

编程

elasticsearch中英文查询实战

今天我们就来看看kibaba中怎么结合es来做中英文查询?

需求

项目需要就是通过用户输入的中文,英文关键字查询出我们的效果。比如: 雪花啤酒 需要搜索雪花、啤酒 、雪花啤酒、xh、pj、xh啤酒、雪花pj 。我们在百度搜索的时候一样,无论我们输入什么关键字,都可以对应查询出来。感觉很高大上的样子

那es怎么实现这样的需求呢?

拼音和ik分词器导入

拼音分词需要拼音分词器,中文分词需要ik分词器。分词器的安装很简单,只需要把下载的包放到plugins目录下,重启即可。

跟ik一样 下载下来打包移动到es plugins 目录名字改为pinyin https://github.com/medcl/elasticsearch-analysis-pinyin

ik分词参考https://www.cnblogs.com/LQBlog/p/10443862.html

我们测试一下:

get请求:http://127.0.0.1:9200/_analyze

body:

{

"analyzer":"pinyin",

"text":"雪花啤酒"

}

我们输入的中文,希望是可以拼音分词实现。看看响应效果:

看到没有,如果出现下面的分词效果,说明你安装插件成功了。

中英文分词实现

首先我们实现二个分词效果,就要把二个分词集成在一起使用才可以。简单来说,就是自定义分词器。

kibaba中我们执行下面的请求

put请求:http://127.0.0.1:9200/opcm3

body:

{

"settings": {

"analysis": {

"analyzer": {

"ik_pinyin_analyzer": {//自定义一个分词器名字叫ik_pinyin_analyzer

"type": "custom",//表示自定义分词器

"tokenizer": "ik_smart",//使用ik分词 ik_smart为粗粒度分词 ik_max_word为最细粒度分词

"filter": ["my_pinyin"]//分词后结果 交给过滤器再次分词

},

"onlyOne_analyzer": {

"tokenizer": "onlyOne_pinyin"

}

},

"tokenizer": {

"onlyOne_pinyin": {

"type": "pinyin",

"keep_separate_first_letter": "true",

"keep_full_pinyin":"false"

}

},"filter": {

"my_pinyin": {//定义过滤器

"type": "pinyin",

"keep_joined_full_pinyin": true,//分词的时候词组首字母分词后组合 如:雪花 分词:xuehua xh

"keep_separate_first_letter": true//分词的时候支持首字母不单独分词如:会分词xue hua xuehua xh x,h

"none_chinese_pinyin_tokenize": true//xh 分词为x,h,xh

}

}

}

},

"mappings": {

"doc": {

"properties": {

"productName": {

"type": "text",

"analyzer": "ik_pinyin_analyzer",//指定分词索引为自定义分词 中文分词后再通过filter交给pinyin分词

"fields": {//暂时未用 只是保留让 自己能够知道有这种方式根据不同条件选择不同的搜索分词

"keyword_once_pinyin": {//新的分词字段 只分词不存在source productName.keyword_once_pinyin 查询时需要判断如果是单字母使用此搜索

"type": "text",

"analyzer": "onlyOne_analyzer"

}

}

}

}

}

}

}

估计大家看有点闷,我大概理解一下。其实就是在我们es进行中文分词,ik分词之后,我们将分词之后 的结果进行拼音分词过滤。

直白点就是

 ik分词 然后将分词后的逐项结果通过filter交给拼音分词  雪花啤酒 ik会分成 雪花,啤酒    然后雪花交给pinyin会分词 xue,hua,xh,x,h  啤酒会分词 pi,jiu,p,j

测试结果

get请求:http://127.0.0.1:9200/opcm3/topic/{id}/_termvectors?fields=productName

无论我们采用中英文搜索的时候,都可以像百度一样查询出来携带关键字的结果。如果大家遇到什么问题,欢迎分享。

以上内容皆为本人观点,欢迎大家提出批评和指导,我们一起探讨!

以上是 elasticsearch中英文搜索在kibaba中使用 的全部内容, 来源链接: utcz.com/z/512264.html

回到顶部