0

我有如下的数据库表 PERSON

|ID  |FIRST_NAME    |LAST_NAME|
|1   |Peter-Parkar  |Williams |
|2   |Peter Panatano|Williams |
|3   |Peter-Pant    |Nati     |

我想使用此查询搜索并获取名字结果

SELECT ID, CONCAT(FIRST_NAME, ' ', LAST_NAME) as PERSON_NAME 
FROM PERSON 
WHERE MATCH(text) AGAINST ('peter-p*' IN BOOLEAN MODE);

我想得到“Peter-Parkar Williams”和“Peter-Pant Nati”的结果,但它并没有像我预期的那样给出。如何得到这个结果?

注意:在这种情况下,我不想使用“LIKE”运算符,严格需要 MATCH AGAINST 的答案。

4

1 回答 1

0

如果您需要对名字和姓氏进行具体说明,则必须将它们放在单独的列中。(注意:有两个单词的名字和两个单词的姓氏。)

FULLTEXT中,您可以更改是否-是标点符号 - 请参阅您的 MySQL/MariaDB 和引擎版本(MyISAM 与 InnoDB)的特定设置。

在柱状方法中

WHERE first_name LIKE 'peter-p%'
   with
INDEX(first_name)

效率很高。

FULLTEXT在这种情况下使用索引速度的另一种方法:

WHERE MATCH(text) AGAINST ('peter' IN BOOLEAN MODE)
  AND text LIKE '%peter-p%'

这将使用索引速度将搜索范围缩小到带有“peter”的行,然后检查“-p”是否跟随它。

于 2020-10-02T20:15:01.690 回答