复现很简单,在某个索引的某个字段中创建一个type: string, analyzer: ik_smart的字段,假设名为 description 。然后填入这么一条数据:“主要经营缅甸琥珀蜜蜡各类产品 翡翠各类成品及半成品 18k 金镶嵌成品 低中高价位齐全 产品款式 大量库存”。
通过 ik_smart 分词器查看其分词结果:(截取部分)
...
{
"token": "琥珀",
"start_offset": 6,
"end_offset": 8,
"type": "CN_WORD",
"position": 3
},
...
可以看出琥珀被分为一个词了。那么再进行以下查询,仅查找“珀”字:
{
"query": {
"match": {
"feature": "珀"
}
}
}
结果却找不到该字。我认为原因应该是, ik_smart 将“琥珀”认为是一个词后,为这个词进行了索引。那么搜索“珀”字自然找不到这条数据,只能说ik analyzer太智能了。
通过测试,发现自带 standard 分词器是可以通过搜索“珀”字,搜索到含有“琥珀”的数据的。原因明显是因为 standard 分词器会拆分每个汉字。
不知道各位都怎么解决这个问题,谢谢。
