mysql分词查询问题

客户输入 公号 能匹配出 公园壹号这个楼盘
客户输入 公园1号 也能匹配出 公园壹号这个楼盘
客户输入 公园一号 也能匹配出 公园壹号这个楼盘
请问怎么样才能做到这样的搜索,我用的是php+mysql搭建的网站,需要开启mysql全文搜索吗,但是看了下,全文搜索好像并不能完全解决我说的这个问题

阅读 5.3k
7 个回答

可以用elastic search实现,你这个需求mysql解决不了。如果数据库不大,可以把所有楼盘名字放到本地cache里,然后做index search。

这个和mysql肯定已经没关系了
需要你后端自己做手动转换,比如将前端传的1和一转换为壹再调用mysql

代码先转换一下搜索关键词再查询吧,数据库还没有这么智能。

后面两个,全文搜索+中文分词应该能搞定,第一个,估计只能自己建影射了

这个并不是mysql的的范畴了,而是你的业务逻辑要做的事情了,其实可以给楼盘表加个关键词列表的字段,比如“公园壹号”对应的搜索关键词列表“公号,公园1号,公园一号,公园壹号,公园”。。。。在搜索的时候,优先匹配关键词列表。

如果你只想用 Mysql 不打算接 Lucene 或 Sphinx 之类的东西,也不是不可能,首先需要分词(二元分词都不需要用到词库),然后将词表连成 LIKE 条件,启用全文检索在数据量不大的情况下效率还说得过去。但是,这个查找的问题是解决了,却没法按匹配度排序。十多年前(好像05、06那会儿吧)我用 Perl 写过一个简单的搜索,分词采用左向最大化匹配算法,数据存储就采用的 Mysql,只是录入时也要对文章分词,然后存入关联词表里;整个搜索过程无需 LIKE,只用到 IN,且可以计算简单的匹配度,但是代码我找不到了。

现在我连“数据库”都建立在 Lucene 上,已经懒得折腾了。

这个并不是mysql的的范畴了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题