[英]MySQL fulltext search over multiple columns
我创建了一个包含 2 列全文索引的表:
CREATE TABLE players
(
id int NOT NULL,
first_name varchar(25) NOT NULL,
last_name varchar(25) NOT NULL,
team_id int NOT NULL,
PRIMARY KEY (id),
FULLTEXT INDEX full_text_pname (first_name, last_name),
CONSTRAINT p_team_id FOREIGN KEY (team_id) REFERENCES teams (id)
);
现在我想执行一个 SQL 查询,该查询接收 first_name 和 last_name 并选择具有这些值的玩家。
代替:
SELECT first_name, last_name, team_id
FROM players
WHERE first_name = % s AND last_name = % s
我如何使用 match 和 against?
MATCH() function 的语法如下:
MATCH (col1,col2,...) AGAINST (expr [search_modifier])
所以查询将是这样的:
SELECT first_name, last_name, team_id
FROM players
WHERE MATCH ( first_name ) AGAINST ("my_first_name" IN BOOLEAN MODE) AND
MATCH ( last_name ) AGAINST ("my_last_name" IN BOOLEAN MODE);
最快这个
WHERE first_name = '...'
AND last_name = '...'
和
INDEX(last_name, first_name)
会比使用FULLTEXT
更快
在两列上进行相等匹配的中等速度,你需要
WHERE MATCH(last, first) -- the order must match the index
AGAINST('+James +Rick IN BOOLEAN MODE)
和
FULLEXT(last, first)
它有各种各样的问题。 它匹配 Rick, James 以及 James, Rick。 它可能会匹配 Jame, Ricks,因为它将单词视为英语并使用结尾。 等等。
最慢这运行不快:
WHERE MATCH ...
AND MATCH ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.