Mysql Mariadb全文匹配两列
我的查询语法有问题:Mysql Mariadb全文匹配两列,mysql,mariadb,mariasql,Mysql,Mariadb,Mariasql,我的查询语法有问题: SELECT `users`.`name`, `posts`.* FROM `posts` LEFT JOIN `users` ON `posts`.`user_id` = `users`.`id` WHERE MATCH (title,body) AGAINST('search') 匹配仅使用一个,不使用两个。。。请接受我的建议如何修复它 要检查“搜索”是否同时出现在标题和正文中,我建议使用这种不明显的组合。(我省略了用户,因为它们与问题无关。) 当使用FULLTEX
SELECT `users`.`name`, `posts`.*
FROM `posts`
LEFT JOIN `users` ON `posts`.`user_id` = `users`.`id`
WHERE MATCH (title,body) AGAINST('search')
匹配
仅使用一个,不使用两个。。。请接受我的建议如何修复它 要检查“搜索”
是否同时出现在标题
和正文
中,我建议使用这种不明显的组合。(我省略了用户
,因为它们与问题无关。)
当使用FULLTEXT
时,我认为优化器不知道如何有效地应用两次FULLTEXT,因此这是一种让它这样做的卑鄙方法
我首先选择了title
,假设它的单词更少,因此不需要进行其他测试
“索引合并相交”可能会在以下情况下生效:
SELECT *
FROM posts
WHERE MATCH(title) AGAINST("search" IN BOOLEAN MODE)
AND MATCH(body) AGAINST("search" IN BOOLEAN MODE)
在这两种情况下,您都需要:
同时包含两列的单个ft索引没有用处
如果需要进一步讨论,请提供SHOW CREATE TABLE
和EXPLAIN SELECT…
您是否拥有
ENGINE=MyISAM
或ENGINE=InnoDB
,这可能很重要;这两种实现方式完全不同。AGAINSTa
?你想要“或”-明智还是“和”-明智?对不起。。我需要在列标题和列正文中搜索两个列,但这两个列是否应该匹配“搜索”
?或者一个就足够了吗?两个都………选择用户
名称,帖子
*从帖子
左侧加入帖子上的用户
用户id
用户id匹配(posts.title)与(+'%divo%'在布尔模式下)或匹配(posts.body)与(+“%divo%”在布尔模式下)
SELECT *
FROM posts
WHERE MATCH(title) AGAINST("search" IN BOOLEAN MODE)
AND MATCH(body) AGAINST("search" IN BOOLEAN MODE)
FULLTEXT(title),
FULLTEXT(body)