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

Mysql ограничения за индексиране на пълен текст?

Със сигурност не е!

Всяка дума за търсене, съставена само от блокирани думи, тихо ще се провали. Думите могат да бъдат блокирани поради ограничения за минимална/максимална дължина и/или файл със стоп дума.

Намерих файла със стоп думата по подразбиране твърде агресивен, пречеше на много валидни търсения. Също така минималната дължина по подразбиране от 4 се включваше много често за акроними, които хората биха искали да търсят. Намалих ft_min_word_len до 3 и премахнах напълно списъка за спиране (ft_stopword_file=''). Документ:http://dev.mysql.com /doc/refman/5.1/en/fulltext-fine-tuning.html

Можете също така да прегледате заявката за търсене, за да видите дали съдържа само <4-буквени думи и да се върнете към търсене като LIKE в този случай. Няма толкова лесен начин да заобиколите списъка за спиране на ниво приложение.

Изборът на „словни знаци“ може да не отговаря на вашите нужди и е труден за промяна. Например търсенето на „Тери“ няма да съвпадне с „Тери“. По принцип няма поддръжка за какъвто и да е корен, така че „бисквита“ също няма да съответства на „бисквити“.

И накрая, както спомена cg, няма поддръжка за InnoDB. В днешно време не искате да поставяте всичките си данни в MyISAM таблица.

Ако имате излишно място за съхранение, това, което можете да направите, е да поставите основната, канонична версия на данните в таблица InnoDB и след това да създадете отделна таблица MyISAM, която съдържа копие на съдържанието на свободен текст, само за използване като примамка за търсене. Трябва да актуализирате и двете таблици при промяна, но ако таблицата MyISAM загуби целостта, тогава поне губите само възможността да търсите в съответните редове, вместо да изпомпвате реалните живи данни и да получавате грешки в приложението.

След това можете, ако имате излишни цикли, да приложите своя собствена обработка на текст върху примамката за търсене и думите за заявка, за да заобиколите някои от горните ограничения. Например можете да избягвате знаци, които искате да бъдат знаци-думи, да премахвате знаци, които не искате да бъдат знаци-думи, и да извършвате просто ръчно произнасяне на корени на английски.



  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 BY и ORDER BY

  2. Актуализирате ли само променените полета или всички полета?

  3. производителността на neo4j в сравнение с mysql (как може да се подобри?)

  4. Sequelize findAll не е функция

  5. Защо моят скрипт за архивиране на база данни не работи в php?