php - SQL 全文查询仅适用于第一个关键字

标签 php mysql full-text-search full-text-indexing

我不是全文搜索方面的专家,所以我在谷歌上搜索了一个 SQL 查询按相关性排序,并想出了这个有点管用的方法:

SELECT *, MATCH(fulltext_tags) AGAINST ('+blue' '+red') AS relevance FROM `products` WHERE MATCH(fulltext_tags) AGAINST ('+blue' '+red' IN BOOLEAN MODE) ORDER BY relevance DESC

问题是,只考虑了第一个关键字。 假设我有这个 Product 表

+----------+------------------+
|   name   |  fulltext_tags   |
+----------+------------------+
| Product1 | Blue             |
| Product2 | Red              |
| Product3 | Blue Red         |
| Product4 | Yellow           |
+----------+------------------+

上面的查询只返回产品 1 和 3,它完全忽略了第二个关键字 '+red'。即使添加 +Yellow 作为第三个关键字仍然会忽略它,因此它会忽略第一个关键字之后的任何内容...

由于至少一个或两个关键字出现在 fulltext_tags 字段中,因此使用 +blue 和 +red 的查询返回 Product1 Product2 和 Product3,我该如何做到这一点?

谢谢

最佳答案

你应该使用 REGEXP '[[:<:]]Red[[:>:]]'为了找到确切的词,所以尝试下面的查询希望它能工作并满足您的要求。

SELECT * FROM `products` 
  WHERE fulltext_tags REGEXP '[[:<:]]Red[[:>:]]' 
  OR fulltext_tags REGEXP '[[:<:]]Blue[[:>:]]';

可以看到DEMO Here .

更新 1

试试这个查询,我可以观察到你想做这样的事情,

SELECT *, 
      MATCH(fulltext_tags) AGAINST ('+blue' '+red')     
      AS relevance FROM `products` 
  WHERE MATCH(fulltext_tags) AGAINST('Red') 
      OR MATCH(fulltext_tags) AGAINST('Blue')
  ORDER BY relevance DESC

请参阅此处 ONLINE DEMO

关于php - SQL 全文查询仅适用于第一个关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37650209/

相关文章:

php - 仅在 mpdf 版本 6.0 中在第 2 页设置页脚

javascript - Laravel-数据表保护

PHP mySQL 数据库更新值不起作用

mysql 只读副本主数据库性能

python - 在大列表中搜索子字符串

php - 当 SQL 值为 True 时发送邮件

php - 从 php 连接到 mysql

mysql - 即使值为空也显示结果

ruby-on-rails - 在附件中实现全文搜索

full-text-search - Lucene 中的多索引搜索(休眠搜索)