客户输入 公号 能匹配出 公园壹号这个楼盘
客户输入 公园1号 也能匹配出 公园壹号这个楼盘
客户输入 公园一号 也能匹配出 公园壹号这个楼盘
请问怎么样才能做到这样的搜索,我用的是php+mysql搭建的网站,需要开启mysql全文搜索吗,但是看了下,全文搜索好像并不能完全解决我说的这个问题
客户输入 公号 能匹配出 公园壹号这个楼盘
客户输入 公园1号 也能匹配出 公园壹号这个楼盘
客户输入 公园一号 也能匹配出 公园壹号这个楼盘
请问怎么样才能做到这样的搜索,我用的是php+mysql搭建的网站,需要开启mysql全文搜索吗,但是看了下,全文搜索好像并不能完全解决我说的这个问题
这个并不是mysql的的范畴了,而是你的业务逻辑要做的事情了,其实可以给楼盘表加个关键词列表的字段,比如“公园壹号”对应的搜索关键词列表“公号,公园1号,公园一号,公园壹号,公园”。。。。在搜索的时候,优先匹配关键词列表。
如果你只想用 Mysql 不打算接 Lucene 或 Sphinx 之类的东西,也不是不可能,首先需要分词(二元分词都不需要用到词库),然后将词表连成 LIKE 条件,启用全文检索在数据量不大的情况下效率还说得过去。但是,这个查找的问题是解决了,却没法按匹配度排序。十多年前(好像05、06那会儿吧)我用 Perl 写过一个简单的搜索,分词采用左向最大化匹配算法,数据存储就采用的 Mysql,只是录入时也要对文章分词,然后存入关联词表里;整个搜索过程无需 LIKE,只用到 IN,且可以计算简单的匹配度,但是代码我找不到了。
现在我连“数据库”都建立在 Lucene 上,已经懒得折腾了。
5 回答3.2k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
1 回答4k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
5 回答1.4k 阅读
可以用elastic search实现,你这个需求mysql解决不了。如果数据库不大,可以把所有楼盘名字放到本地cache里,然后做index search。