Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak sprawić, by wyszukiwanie wartości logicznych pełnego tekstu wychwyciło termin C++?

Będziesz musiał zmienić wyobrażenie MySQL o tym, czym jest słowo.

Po pierwsze, domyślna minimalna długość słowa to 4. Oznacza to, że żadne wyszukiwane hasło zawierające tylko słowa o długości <4 liter nigdy nie będzie pasować, niezależnie od tego, czy jest to „C++”, czy „cpp”. Możesz to skonfigurować za pomocą ft_min_word_len opcja konfiguracji, np. w twoim my.cfg:

[mysqld]
ft_min_word_len=3

(Następnie zatrzymaj/uruchom MySQLd i odbuduj indeksy pełnotekstowe.)

Po drugie, „+” nie jest uważany przez MySQL za literę. Możesz zrobić z tego literę, ale wtedy oznacza to, że nie będziesz w stanie wyszukać słowa „ryba” w ciągu „ryba+frytki”, więc wymagana jest pewna ostrożność. I nie jest to trywialne:wymaga przekompilowania MySQL lub zhakowania istniejącego zestawu znaków. Zobacz sekcję rozpoczynającą się „Jeśli chcesz zmienić zestaw znaków, które są uważane za znaki słowne...” w sekcja 11.8.6 dokumentu.

Tak, coś takiego jest powszechnym rozwiązaniem:możesz przechowywać swoje „prawdziwe” dane (bez ucieczki) w podstawowej, ostatecznej tabeli  — zwykle używając InnoDB w celu zapewnienia zgodności z ACID. Następnie można dodać pomocniczą tabelę MyISAM, zawierającą tylko zniekształcone słowa dla przynęty wyszukiwania pełnotekstowego. Korzystając z tego podejścia, możesz również wykonać ograniczoną formę stemplowania.

Inną możliwością jest wykrycie wyszukiwań, których MySQL nie może wykonać, takich jak te zawierające tylko krótkie słowa lub nietypowe znaki, i powrót do prostego, ale powolnego wyszukiwania LIKE lub REGEXP tylko dla tych wyszukiwań. W tym przypadku prawdopodobnie będziesz chciał również usunąć stoplistę, ustawiając ft_stopword_file do pustego ciągu, ponieważ nie jest praktyczne traktowanie wszystkiego w tym jako specjalnego.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Brak wybranej bazy danych błąd w PHP z MySQLi

  2. Wiele relacji z tym samym modelem CakePHP

  3. MySQL DATEDIFF() vs TIMESTAMPDIFF():Jaka jest różnica?

  4. Nieznany host serwera MySQL

  5. MySQL — ta wersja MySQL nie obsługuje jeszcze podzapytania 'LIMIT &IN/ALL/ANY/SOME