php mysql 同文搜索_php-使用模糊匹配搜索单个MySQL文本列

我有一个带有“名称”列(VARCHAR(255))的MySQL InnoDB表,我希望用户能够对其进行搜索,并返回所有匹配的行.但是,我不能仅使用LIKE查询,因为搜索需要允许用户输入与可用名称相似的名称(例如,以“ The”为前缀,或者不知道正确的名称包含撇号).

两个示例是:

DB中的名称:“ Rose and Crown”

可能匹配的示例搜索:“ Rose&皇冠”,“玫瑰与皇冠”,“玫瑰与皇冠”,“玫瑰与皇冠”

DB中的名称:“ Diver’s Inn”

可能匹配的示例搜索示例:“潜水员客栈”,“潜水员客栈”,“潜水员客栈”

我还希望能够通过“最接近匹配”的相关性对结果进行排名,尽管我不确定如何进行(也许编辑距离?).

该表不可能增长到超过几千行,因此一种不扩展到数百万行的方法是可以的.输入后,给定行的名称值将不会更改,因此,如果需要进行昂贵的索引操作,则不会有问题.

有没有可以执行此任务的工具?我看过Zend_Search_Lucence,但似乎只关注文档,而我只在搜索单个列时很有趣.

编辑:在SOUNDEX搜索上,这不会产生我想要的结果.例如:

SELECT soundex( 'the rose & crown' ) AS soundex1, soundex( 'rose and crown' ) AS soundex2;

soundex1 soundex2

T6265 R253265

解决方案:最后,我使用Zend_Search_Lucence并假装每个名称实际上都是一个文档,这似乎达到了我想要的结果.我想这是一种全文搜索,即使每个字符串最多3-4个字也是如此.

解决方法:

全文搜索(FTS)是您所需的数据库功能的术语.有:

WHERE MATCH(column)

AGAINST('Rose', 'Crown')

>狮身人面像(第三方)

> Lucene / SOLR(第三方)

标签:search,sql,mysql,php

来源: https://codeday.me/bug/20191102/1992444.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值