不要急,总有办法的

ES中文加拼音搜索

Elasticsearch | 作者 aa1356889 | 发布于2019年02月28日 | 阅读数:8581

参数
{
"settings": {
"number_of_shards": "1",
"index.refresh_interval": "15s",
"index": {
"analysis": {
"analyzer": {
"ik_pinyin_analyzer": {
"type": "custom",
"tokenizer": "ik_smart",//ik_smart也试过
"filter": "pinyin_filter"
}
},
"filter": {
"pinyin_filter": {
"type": "pinyin",
"keep_first_letter": false
}
}
}
}
}
}
我的理解是   ik分词 然后将分词后的逐项结果通过filter交给拼音分词  雪花啤酒 ik会分成 雪花,啤酒    然后雪花交给pinyin会分词 xue,hua,xh  啤酒会分词 pi,jiu,pj 
GET /${index}/${type}/${id}/_termvectors?fields=${fields_name}

我通过此方法查看数据分词结果 是分成 xue,hua,pi,jiu

我的需求是 雪花啤酒 搜索xh xhpj xh啤酒 雪花pj 都能搜出结果
已邀请:

rochy - rochy_he

赞同来自:

1. 首先你配置里面的 keep_first_letter 必须设置为 true;这样才能搜索到类似 xh、pj 这样的词汇
2. 你想查询到 xhpj 个人觉得即便 keep_first_letter 设置为 true 依旧无法满足需求;
 
因为分词器的结果为  雪花/啤酒   这是两个词语,所以借助 filter 无法生成 xhpj 这样的 token
所以你还得加上另外一个 Shingle Token Filter 可以将上述的词语进行一次组合,兴许可以组合成 xhpj 这样的 token;
 
或者你词典里面存在 雪花啤酒 也是可以的;
或者你直接对短语使用 pinyin analyzer 即可

要回复问题请先登录注册