Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да направите пълнотекстово търсене на mysql с множество колони, където се съвпадат частични думи

В булев режим, изискването на низове да присъстват (вместо просто да се постига по-висок резултат), се извършва с + . съвпадението на префикса се извършва с край * . Изглежда това е, което искате, така че потърсете:

+John* +S*
+John* +Smith*
+Smith* +J*
+Jo* +S*

Имайте предвид, че индексите с пълен текст не могат да ви помогнат да търсите „навсякъде в една дума“. така че нещо като *mith* е задължително да се провали:те са предназначени да съвпадат от знак 1 в индекс.

Ако искате също да ги подредите по стойности на съвпадение и например имате нужда от John Smith преди Johnny Smithson , бихте направили това:

 SELECT * FROM user 
 WHERE MATCH(..fields..) AGAINST ('match' IN BOOLEAN MODE)
 ORDER BY MATCH(..fields..) AGAINST ('match' IN BOOLEAN MODE) DESC;

Което ще видите, няма да ви отведе до никъде, освен ако не добавите всички думи>=ft_min_word_len отново отделно:

+John* +S* John
+John* +Smith* John Smith
+Smith* +J* Smith
+Jo* +S*

За последния и двата са <4 знака по подразбиране, така че не можем да добавим параметри за сортиране за това в mysql по подразбиране, но можете да зададете ft_min_world_len друго е желано.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. в рамките на групови сортировки в mysql

  2. Предупреждение:mysqli_connect():(28000/1045):Достъпът е отказан за потребителя

  3. Yii - създаване на временна таблица и използването й в следващата заявка води до обща грешка:2014 Не може да се изпълнят заявки, докато други небуферирани заявки са активни

  4. Не може да се свърже с базата данни:Отказан достъп за потребител ''@'localhost' до база данни 'socialdb'

  5. Алтернатива на освен в MySQL