匹配中的连字符全文MariaDB

问题描述

我的DB表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进行回答。

解决方法

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

FULLTEXT中,您可以更改-是否为标点符号-请参阅您的MySQL / MariaDB和Engine版本的特定设置(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”。