繁体   English   中英

MySQL 多列全文搜索

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM