Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 与全文匹配的连字符_Mysql_Mariadb_Mariadb 10.4_Mariadb 10.3 - Fatal编程技术网

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*'在布尔模式下))如果未定义为全文,则不能使用匹配