问题描述
我的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”。