[求助]ik_smart 分词导致的查询问题

2019-09-03 17:27:54 +08:00
 foxyier

环境描述: 某字段采用了 ik_smart 分词, 存储数据为中文

问题描述: 欲查询该字段数据为"上演相亲戏"时, 使用 match 及 match_phrase 查询"相亲", 可以正常查询, 而查询"演相"时, 则无法查询到数据, 通过 termvectors 查询得出"相亲"被分为一个词

需求描述: 希望了解是否有查询语句可以通过查询"演相"来获取上述"上演相亲戏"数据

4140 次点击
所在节点    Elasticsearch
9 条回复
madNeal
2019-09-03 17:32:55 +08:00
分词的时候就是那样分词的呀,“演相”就不可能存在一个字段里面,除非你查单个字吧
foxyier
2019-09-03 17:36:04 +08:00
@madNeal 是的, 所以想问一下, 有没有特殊的办法, 能暂时在本次查询时, 使分词失效。
fifa666
2019-09-03 17:44:00 +08:00
应该不行吧,倒排索引都已经创建好了
optional
2019-09-03 17:47:49 +08:00
有这个需求,应该用 standard 分词器。
当然妥协方案是建立 2 个字段,一个用 ik_smart 一个 用 standard,搜索的时候按需选择
misaka19000
2019-09-03 17:54:38 +08:00
简单,用 like 查询
XJohn
2019-09-03 18:03:44 +08:00
建索引的时候分词用 ik_max,搜索的时候分词用 ik_smart
zisway
2019-09-03 19:06:44 +08:00
可以使用 wildcard 语句来查询,不过如果是类似于数据库的%XXX%,性能不太好。
还有一种,可以使用 ngram 分词,根据需求确定好 min 和 max,不建议 max 与 min 的 diff 太大。分词后,就能使用 match 等直接查询到数据。
rrfeng
2019-09-03 19:08:52 +08:00
你要搞清楚分词在两个地方运行:
索引存储
查询内容

正确的配置查询的分词会把分成 演 相 两个词去查。
zzl22100048
2019-09-03 21:11:00 +08:00
同一个字段做个 field 用 standard 分词

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/597592

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX