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

Търсенето на пълен текст ли е отговорът?

Проблемът с търсенето от типа '%keyword%' е, че няма начин за ефективно търсене по него в обикновена таблица, дори ако създадете индекс на тази колона. Помислете как бихте изглеждали този низ в телефонния указател. Всъщност няма начин да го оптимизирате - трябва да сканирате целия телефонен указател - и това прави MySQL, сканиране на пълна таблица.

Ако промените това търсене на „ключова дума%“ и използвате индекс, можете да получите много бързо търсене. Все пак изглежда, че това не е това, което искате.

Имайки това предвид, използвах индексиране/търсене в пълен текст доста често и ето няколко предимства и недостатъци:

Плюсове

  • Много бързо
  • Връща резултати, сортирани по уместност (по подразбиране, въпреки че можете да използвате всяко сортиране)
  • Могат да се използват стоп думи.

Против

  • Работи само с MyISAM таблици
  • Думите, които са твърде кратки, се игнорират (минимумът по подразбиране е 4 букви)
  • Изисква различен SQL в клаузата where, така че ще трябва да промените съществуващите заявки.
  • Не съвпада с частични низове (например „дума“ не съвпада с „ключова дума“, а само с „дума“)

Ето добра документация за търсене в пълен текст .

Друг вариант е да използвате система за търсене като Sphinx . Може да бъде изключително бърз и гъвкав. Оптимизиран е за търсене и се интегрира добре с MySQL.



  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:GROUP_CONCAT с ORDER BY COUNT?

  2. mySQL get TOP 100 scores запитването ме побърква

  3. MySQL целочисленото сравнение игнорира последващите алфа знаци

  4. MySQL QUERY LIKE не връща нищо

  5. Изберете стойности, които отговарят на различни условия на различни редове?