![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 1.08.2011 Ostrzeżenie: (0%) ![]() ![]() |
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:) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.09.2025 - 22:31 |