mysql分词查询问题

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

阅读 1.2k
评论
    7 个回答
    • 1.4k

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

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

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

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

            • 2.1k

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

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

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

                这个并不是mysql的的范畴了

                  撰写回答

                  登录后参与交流、获取后续更新提醒

                  相似问题
                  推荐文章