我想对 MySQL 数据库中的多个列进行全文搜索,仅使用 1 个输入字段来搜索地址。
到目前为止,我的代码有效,但我也得到了返回的行,其中并非所有搜索词都存在。
SELECT *, ((1.3 * (MATCH (city) AGAINST ('+$search*' IN BOOLEAN MODE)))
+ (0.6 * (MATCH (name, zip, str) AGAINST ('+$search*' IN BOOLEAN MODE)))) AS relevance
FROM service
WHERE (MATCH (name, city, zip, str) AGAINST ('+$search*' IN BOOLEAN MODE))
HAVING relevance > 0 ORDER BY relevance DESC LIMIT 10
这可能会返回如下内容:
$search = "Anderson City ZIP"
1. Anderson, City, ZIP, street x
2. Anderson, City, ZIP, street y
3. Smith, City, ZIP, street x
因此第 3 行是错误的,因为它不包含 Anderson
,而是包含 Smith
。
我已经尝试在 $search
字符串中添加 + 运算符 (Anderson City ZIP --> +Anderson +City +ZIP
),但结果通常是这样不显示任何内容。
是否可以仅返回 100% 匹配的行?
最佳答案
加号是一件好事,但您必须确保您正在搜索的字符串之一不在表中超过 50% 的行中。
还可以考虑使用引号来匹配完整表达式:+"Anderson City ZIP"
关于php - MysqL:对多列执行全文搜索并100%匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28568228/