SQL 全文查询仅适用于第一个关键字
SQL full text query only working for first keyword
我不是全文搜索专家,所以我在谷歌上搜索了一个 SQL 查询 SORTED BY RELEVANCY 并想出了这个有点工作:
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
问题是,只考虑了第一个关键字。
假设我有这个产品 table
+----------+------------------+
| name | fulltext_tags |
+----------+------------------+
| Product1 | Blue |
| Product2 | Red |
| Product3 | Blue Red |
| Product4 | Yellow |
+----------+------------------+
以上查询只returns产品1和3,完全忽略了第二个关键字'+red'。即使添加 +Yellow 作为第三个关键字仍然会忽略它,因此它会忽略第一个关键字之后的任何内容...
我如何使用 +blue 和 +red returns Product1 Product2 和 Product3 进行查询,因为 fulltext_tags 字段中至少有一个或两个关键字出现?
谢谢
您应该使用 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
我不是全文搜索专家,所以我在谷歌上搜索了一个 SQL 查询 SORTED BY RELEVANCY 并想出了这个有点工作:
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
问题是,只考虑了第一个关键字。 假设我有这个产品 table
+----------+------------------+
| name | fulltext_tags |
+----------+------------------+
| Product1 | Blue |
| Product2 | Red |
| Product3 | Blue Red |
| Product4 | Yellow |
+----------+------------------+
以上查询只returns产品1和3,完全忽略了第二个关键字'+red'。即使添加 +Yellow 作为第三个关键字仍然会忽略它,因此它会忽略第一个关键字之后的任何内容...
我如何使用 +blue 和 +red returns Product1 Product2 和 Product3 进行查询,因为 fulltext_tags 字段中至少有一个或两个关键字出现?
谢谢
您应该使用 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