比如 [汉字, 汗渍] 这两个词用pinyin分词得出 [han, zi]
当业务应用搜索 [汉子] 时,search_analyzer分词器得出的pinyin也是[han, zi]
此时匹配到的是 [汉字, 汗渍] 。这并不符合我的业务需求。
请教怎么解决pinyin分词器在遭遇汉字时仍然原样保留汉字,遭遇字母时切割拼音?
例如:
--- updated by 2018-04-27 19:41 ---
建立索引
插入2个文档
搜索同音字
搜索[韩资]时,分词器得到了[han, zi]所以能匹配到文档,这样其实不是很符合用户期望的,我希望搜索[韩资]时返回空,搜索[hanzi]时返回id1,id2文档。
当业务应用搜索 [汉子] 时,search_analyzer分词器得出的pinyin也是[han, zi]
此时匹配到的是 [汉字, 汗渍] 。这并不符合我的业务需求。
请教怎么解决pinyin分词器在遭遇汉字时仍然原样保留汉字,遭遇字母时切割拼音?
例如:
hanzi => [han, zi]
汉子 => [汉子]
中文feichangbucuo => [中文, fei, chang, bu, cuo]
还是说在应用里检测输入,发现搜索关键词存在汉字时,搜索条件不要使用 myField.pinyin 这一列?如果这样子做了,那么汉字跟拼音的混搜有什么好办法?例如: 中guo, xue习等--- updated by 2018-04-27 19:41 ---
建立索引
PUT /mypinyin
{
"settings": {
"index": {
"analysis": {
"analyzer": {
"pinyin_analyzer": {
"type": "custom",
"tokenizer": "pinyin_tokenizer"
}
},
"tokenizer": {
"pinyin_tokenizer": {
"type": "pinyin",
"keep_first_letter": false
}
}
}
}
},
"mappings": {
"doc": {
"properties": {
"name": {
"type": "text",
"analyzer": "ik_max_word",
"fields": {
"pinyin": {
"type": "text",
"analyzer": "pinyin_analyzer"
}
}
}
}
}
}
}
插入2个文档
put mypinyin/doc/1
{
"name": "汉字"
}
put mypinyin/doc/2
{
"name": "汗渍"
}
搜索同音字
GET mypinyin/doc/_search
{
"query": {
"match": {
"name.pinyin": {
"query": "韩资",
"operator": "and"
}
}
}
}
// 结果
{
"took": 4,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 0.51623213,
"hits": [
{
"_index": "mypinyin",
"_type": "doc",
"_id": "2",
"_score": 0.51623213,
"_source": {
"name": "汗渍"
}
},
{
"_index": "mypinyin",
"_type": "doc",
"_id": "1",
"_score": 0.51623213,
"_source": {
"name": "汉字"
}
}
]
}
}
搜索[韩资]时,分词器得到了[han, zi]所以能匹配到文档,这样其实不是很符合用户期望的,我希望搜索[韩资]时返回空,搜索[hanzi]时返回id1,id2文档。
1 个回复
hnj1575565068 - 90后
赞同来自:
参数可以自己设置,分词后保留中文,mapping中analyzer用custom_analyzer,search_analyzer用ik_smart,输中文可以正常搜