复现很简单,在某个索引的某个字段中创建一个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 分词器会拆分每个汉字。
不知道各位都怎么解决这个问题,谢谢。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.