具有特定词序的 MySQL 全文

标签 mysql regex search full-text-search

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

"pizza road"

它将返回“The best Pizza down the road”,但不会返回“the road to the best Pizza”。

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

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

我可以根据要求提供表格/代码示例。

提前致谢!

最佳答案

您是否尝试过类似的操作:

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

关于具有特定词序的 MySQL 全文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6288753/

相关文章:

php - Cometchat,按发送日期说明订购

javascript - 删除 <script type ="JavaScript">abcd</script> 标签之间的所有内容

algorithm - 如何将威胁空间搜索添加到我的井字游戏算法中?

java - 返回二维数组的索引

PHP 搜索脚本无法正确返回页面

php - 对查询结果使用 foreach() 而不是 while()

mysql - 在 MySQL 中从数组中选择列的替代方法

regex - 我可以在所有情况下使用 (?=...)|(?<=...) 而不是独立的 (?=...) 或 (?<=...) 吗?

javascript - 正则表达式失败

mysql - 如果没有my.cnf,mysql 用什么?