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.