我有一个有公司(id,name)的表。 在我必须搜索输入查询之前,用“like”处理记录。某些时候,客户希望它以输入查询结束,有时它可能会在两者之间发生,它应该从它开始。所以我用的不同变化“喜欢”MySQL - 通过SubString匹配的顺序索引
输入查询:微
select * from Company where CompanyName like "Micro%";
select * from Company where CompanyName like "%Micro%";
select * from Company where CompanyName like "%Micro";
很简单权。现在变体开始出现,用“喜欢”来处理并不容易。就像在单词开始时搜索查询时发生的一种情况一样。像同上面输入查询结果集应包含
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)'?虽然我建议你也研究[全文搜索](http://dev.mysql.com/doc/en/fulltext-search.html),或者像[Apache Solr](http:// lucene.apache.org/solr/)或[Sphinx](http://sphinxsearch.com/),因为您当前的模式匹配搜索不是可靠的。 – eggyal 2015-03-25 10:01:30
是的,我已经建立了Apache Solr,因为除了这种情况之外,还有很多搜索日益变得越来越复杂。但目前我认为ORDER BY LOCATE('Micro',CompanyName)将起作用。谢谢 – planet260 2015-03-25 10:19:38