具有特定字顺序的MySQL全文

时间:2011-06-09 06:12:23

标签: mysql regex search full-text-search

我想知道是否有可能以某种方式进行MATCH()AGAINST()(全文)搜索,这些搜索不是直接相邻的词需要按特定顺序进行?在我的网站上,当用户在双引号之间键入单词时,搜索将仅显示具有该特定顺序的单词的结果。例如,如果这是搜索词:

"pizza road"

它将返回'最好的披萨',但不是'通往最佳披萨的道路'。

我知道BOOLEAN模式将允许“短语”搜索,但这意味着这些单词需要彼此相邻(仅用空格,句点,逗号等分隔),这显然不会返回上面列出的结果:http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html

目前我正在使用regexp来执行此操作,但不用说这是搜索varchar列(无意义全文索引)的一种不好的方法,即使它只是不到200,000行。所以我想知道的是,是否可以使用MATCH()AGAINST()执行相同的搜索?或者我应该将它与正则表达式结合起来?还是有其他方法我没有想过?

我可以根据要求提供表格/代码样本。

提前致谢!

2 个答案:

答案 0 :(得分:1)

你有没有试过像:

SELECT * 
FROM `table` 
WHERE MATCH(`first_column`) 
      AGAINST('+pizza +road' IN BOOLEAN MODE)
      HAVING `first_column` LIKE '%pizza %road%' 

答案 1 :(得分:1)

全文搜索(通常在关系数据库中实现)是一种黑客攻击,旨在仅提供非常有限的预期功能子集,以尝试与更好的技术竞争。全文索引是Apple到RDBMS的Orange。

为了能够使用传统全文搜索引擎支持的“NEAR”运算符进行搜索,您需要使用位置元数据实现自己的inverted index,这是传统搜索引擎的工作方式。它

虽然当然可能,大多数开发人员宁愿使用全文搜索引擎来解决这个问题,而不是花费大量精力来重新发明这个问题。