Mysql 与全文匹配的连字符
我有一个像下面这样的人Mysql 与全文匹配的连字符,mysql,mariadb,mariadb-10.4,mariadb-10.3,Mysql,Mariadb,Mariadb 10.4,Mariadb 10.3,我有一个像下面这样的人 |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)
|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);
我想得到“彼得·帕克·威廉姆斯”和“彼得·潘特·纳蒂”的结果,但这并没有达到我的预期。如何得到这个结果
注意:在这种情况下,我不想使用“LIKE”运算符,严格要求答案与MATCH-on匹配。如果您需要对名字和姓氏进行详细说明,则必须将它们放在单独的列中。(注意:有两个单词的名字和两个单词的姓氏。) 在
FULLTEXT
中,您可以更改-
是否为标点符号——请参阅您的MySQL/MariaDB和Engine版本(MyISAM与InnoDB)的具体设置
以专栏式的方式
WHERE first_name LIKE 'peter-p%'
with
INDEX(first_name)
效率很高
在这种情况下,另一种使用全文索引速度的方法是:
WHERE MATCH(text) AGAINST ('peter' IN BOOLEAN MODE)
AND text LIKE '%peter-p%'
这将使用索引速度将搜索范围缩小到带有“peter”的行,然后检查“-p”是否紧跟其后。您的模式中如何定义FIRST_NAME
,是否使用fulltext it is VARCHAR。这是我使用SELECT concat(first_name)、last_name)作为人名的最精确的查询,其中(匹配(text)对('peter-p*'在布尔模式下))如果未定义为全文,则不能使用匹配