关于 mysql 全文检索的分词和 wildcard

2020-01-02 12:08:49 +08:00
 xianyu0
需求是这样的,搜索关键字有可能是词组,期望搜索出来的结果包含整个词组(即不分词),但可以带后缀通配符。

比如:搜索 hello world
期望结果包括:
hello world
hello worlds
不包括:
hello xxx world

mysql 的全文检索通过 double quote 阻止分词,但是在 double quote 里无法使用 wildcard,
比如 match(c) against('"hello world*"' in boolean mode) 的搜索结果并不包含 hello worlds。

这个貌似是 mysql 的 bug,搜到这个 issue: https://bugs.mysql.com/bug.php?id=80723

不知是否有办法绕过(暂不考虑 elasticsearch……
3788 次点击
所在节点    MySQL
6 条回复
simapple
2020-01-02 15:21:52 +08:00
也算不上 bug, 你搜索 helloworld* 就好了,不要留出空格
reidxx
2020-01-02 15:40:28 +08:00
楼主用 mysql 的全文索引怎么处理中文问题的?
wangyzj
2020-01-02 16:31:21 +08:00
我觉得你要用 mysql fulltext 就别太纠结他的分词把
或者自己挂一个分词插件
xianyu0
2020-01-02 16:56:09 +08:00
@simapple
搜 helloworld* 得不到 `hello world' 这样的结果吧

@reidxx
我搜索的内容全是英文的,mysql5.6+之后不是引入了 ngram 了吗?已经支持中文分词了吧,不过貌似是比较简单的分词
klaudy
2020-01-03 08:44:47 +08:00
mysql 正则表达式
simapple
2020-01-03 17:34:37 +08:00
@xianyu0 哦 没看清问题,我试了一下 match(content) against('"hello world"' in boolean mode) 这样搜,可以匹配到 hello world 和 hello worlds

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

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

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

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

© 2021 V2EX