Witam.
Jestem w trakcie implementacji wyszukiwarki do sklepu internetowego.
Poczytałam trochę o wyszukiwaniu pełnotekstowym i postanowiłam zastosować je w rozwiązaniach. Jednak nie do końca spełnia to moje oczekiwania, stąd ten temat i pytanie - czy klauzula jest dobrze napisana, czy może należy ją w jakiś sposób zmodyfikować aby wyniki były lepsze?
Przypuśćmy, że mam tabelę products z polami: id, name (VARCHAR), description (TEXT). Na pola name i description nałożony jest indeks FULLTEXT.
W tabeli produktów mam m.in produkty o następującej nazwie:
"Brelok fioletowy", "Brelok myszka", "Brelok ludzik", "Breloki zajączki", "Breloki rybki".
Stworzyłam następującą klauzulę do wyszukiwania po zadanej frazie:
'SELECT name FROM products WHERE MATCH (name, description) AGAINST ("'.$fraza.'")'
Problem w tym, że gdy jako frazę podaję słowo "brelok" - wyszukuje mi jedynie te produkty, które w nazwie mają "brelok", czyli "brelok fioletowy", "brelok myszka" oraz "brelok ludzik".
W zwracanych wynikach nie ma produktów, których nazwa zaczyna się od "Breloki".
W jaki sposób sprawić, aby również produkty które posiadają daną frazę w nazwie lub opisie (ale z dodatkowymi znakami, np. tak jak w przypadku "brelok" i "breloki"), były zwracane w wynikach?
Jak inaczej można podejść do tematu wyszukiwania, tak aby w wynikach zwracane były nie tylko exact match, ale także rekordy bardzo podobne do danej frazy (różniące się np. jedną lub dwiema literami)?
Czytałam tu i tam na temat algorytmu Levenshteina, ale niestety nie potrafiłam tego zaimplementować - być może ktoś z forum byłby pomocny w tej kwestii?
Z góry dziękuję za pomoc:)