环境描述: 某字段采用了 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 分词 |