环境描述: 某字段采用了 ik_smart 分词, 存储数据为中文
问题描述: 欲查询该字段数据为"上演相亲戏"时, 使用 match 及 match_phrase 查询"相亲", 可以正常查询, 而查询"演相"时, 则无法查询到数据, 通过 termvectors 查询得出"相亲"被分为一个词
需求描述: 希望了解是否有查询语句可以通过查询"演相"来获取上述"上演相亲戏"数据
1
madNeal 2019-09-03 17:32:55 +08:00
分词的时候就是那样分词的呀,“演相”就不可能存在一个字段里面,除非你查单个字吧
|
3
fifa666 2019-09-03 17:44:00 +08:00
应该不行吧,倒排索引都已经创建好了
|
4
optional 2019-09-03 17:47:49 +08:00
有这个需求,应该用 standard 分词器。
当然妥协方案是建立 2 个字段,一个用 ik_smart 一个 用 standard,搜索的时候按需选择 |
5
misaka19000 2019-09-03 17:54:38 +08:00
简单,用 like 查询
|
6
XJohn 2019-09-03 18:03:44 +08:00 via iPhone
建索引的时候分词用 ik_max,搜索的时候分词用 ik_smart
|
7
zisway 2019-09-03 19:06:44 +08:00
可以使用 wildcard 语句来查询,不过如果是类似于数据库的%XXX%,性能不太好。
还有一种,可以使用 ngram 分词,根据需求确定好 min 和 max,不建议 max 与 min 的 diff 太大。分词后,就能使用 match 等直接查询到数据。 |
8
rrfeng 2019-09-03 19:08:52 +08:00 via Android
你要搞清楚分词在两个地方运行:
索引存储 查询内容 正确的配置查询的分词会把分成 演 相 两个词去查。 |
9
zzl22100048 2019-09-03 21:11:00 +08:00
同一个字段做个 field 用 standard 分词
|