【发布时间】:2015-03-25 09:50:54
【问题描述】:
我有一张包含公司(id、name)的表。 在我不得不针对使用“like”处理的记录搜索输入查询之前。有时客户希望它以输入查询结束,有时它可能发生在它应该以它开始的某个时间之间。所以我使用了不同的“like”变体
输入查询:微
select * from Company where CompanyName like "Micro%";
select * from Company where CompanyName like "%Micro%";
select * from Company where CompanyName like "%Micro";
很简单吧。现在变化开始出现,用“like”处理起来并不容易。就像发生在单词开头搜索查询的一种情况一样。与上述输入查询一样,结果集应包含
Microcompany Something
Something Somethin Microcompany
Something Microcompany
所以我改用Regular Expressions
现在我的查询变成了
select * from company where CompanyName regexp '[[:<:]]Micro';
问题:现在我希望根据最接近的匹配索引对结果进行排序。我的意思是,在接近 0 的索引上发生匹配的那个将首先出现,然后是其他的。对于上面的搜索结果,它应该是下面的顺序。
Microcompany Something
Something Microcompany
Something Somethin Microcompany
是否可以通过 MySQL 实现。如果是,比怎么样?有哪些替代方案?
【问题讨论】:
-
ORDER BY LOCATE('Micro', CompanyName)?虽然我建议您也研究一下fulltext search,或者像Apache Solr 或Sphinx 这样的引擎,因为您当前的模式匹配搜索不是可搜索的。 -
是的,我已经设置了 Apache Solr,因为除了这种情况,还有很多搜索变得越来越复杂。但目前我认为 ORDER BY LOCATE('Micro', CompanyName) 会起作用。谢谢
标签: mysql sql regex database search