Indeks wyszukiwania PrestaShop: Dlaczego reindeksacja produktów naprawia wyszukiwanie

390 wyświetleń

Jak wewnętrznie działa wyszukiwanie w PrestaShop

PrestaShop zawiera wbudowaną wyszukiwarkę produktów, która działa na indeksie pełnotekstowym przechowywanym bezpośrednio w bazie danych MySQL. W przeciwieństwie do zewnętrznych usług wyszukiwania, ten indeks znajduje się obok danych produktów w tej samej bazie danych, co oznacza, że jest szybki w odpytywaniu, ale wymaga jawnego utrzymania, aby pozostawał aktualny. Zrozumienie sposobu działania tego systemu wyszukiwania jest pierwszym krokiem do diagnozowania i naprawiania problemów z wyszukiwaniem.

Gdy klient wpisuje zapytanie w pasku wyszukiwania w Twoim sklepie, PrestaShop nie skanuje w czasie rzeczywistym każdej nazwy produktu i opisu. Zamiast tego wyszukuje terminy zapytania w wcześniej zbudowanym indeksie, który mapuje poszczególne słowa na produkty. Indeks ten jest konstruowany przez rozbicie pól tekstowych produktów na poszczególne słowa (tokenizacja), ich normalizację (zamiana na małe litery, usuwanie akcentów) i przechowywanie relacji między każdym słowem a produktami, w których się ono pojawia, wraz z wagą trafności.

To podejście jest zasadniczo takie samo jak w wyszukiwarkach internetowych typu Google, tyle że na znacznie mniejszą skalę. Kompromis polega na tym, że indeks musi być odbudowany za każdym razem, gdy dane produktów zmienią się w sposób, którego automatyczne indeksowanie nie wychwytuje, co jest główną przyczyną większości problemów z wyszukiwaniem w PrestaShop.

Tabele bazy danych wyszukiwania

Indeks wyszukiwania PrestaShop jest rozłożony na kilka tabel bazy danych, z których każda pełni określoną funkcję w procesie wyszukiwania.

ps_search_word

Ta tabela przechowuje każde unikalne słowo wyodrębnione z danych produktów, wraz z językiem, do którego należy. Każde słowo otrzymuje id_word, które służy jako klucz referencyjny. Tabela jest świadoma języków, co oznacza, że słowo "shoe" w katalogu angielskim i "Schuh" w katalogu niemieckim to oddzielne wpisy, każdy powiązany z odpowiednim identyfikatorem języka.

Gdy zajrzysz do tej tabeli, zobaczysz tysiące lub dziesiątki tysięcy wierszy, w zależności od rozmiaru katalogu i liczby języków. Każde odrębne słowo z każdego indeksowanego pola produktu jest tu reprezentowane.

ps_search_index

To jest główna tabela mapowania. Każdy wiersz łączy produkt (id_product) ze słowem (id_word) z wartością wagi. Waga określa, jak istotne jest dane słowo dla danego produktu. Słowo pojawiające się w nazwie produktu ma większą wagę niż to samo słowo pojawiające się w opisie, a wartości wag są konfigurowalne w back office.

Gdy klient wyszukuje "niebieski skórzany portfel", PrestaShop wyszukuje każde słowo w ps_search_word, znajduje odpowiednie wartości id_word, a następnie odpytuje ps_search_index w poszukiwaniu produktów pasujących do tych identyfikatorów słów. Produkty są rankingowane według sumy ich wag dla pasujących słów, przy czym produkty z wyższą łączną wagą pojawiają się na początku wyników.

ps_search_engine

Ta tabela przechowuje wzorce wyszukiwarek referrerów używane do śledzenia, które wyszukiwarki wysyłają ruch do Twojego sklepu. Nie jest bezpośrednio związana z wewnętrzną funkcjonalnością wyszukiwania, ale jest często mylona z nią ze względu na podobne nazewnictwo.

ps_alias

Tabela aliasów przechowuje aliasy wyszukiwanych terminów, czyli alternatywne pisownie lub synonimy, które powinny być mapowane na kanoniczny termin wyszukiwania. Na przykład możesz skonfigurować "sneakers" jako alias dla "adidasy", aby klienci wyszukujący którykolwiek z tych terminów otrzymywali te same wyniki. Aliasy są konfigurowane w back office w sekcji Parametry sklepu > Wyszukiwanie > Szukaj > Aliasy.

Kiedy i dlaczego reindeksacja jest konieczna

PrestaShop posiada funkcję automatycznego indeksowania, która aktualizuje indeks wyszukiwania za każdym razem, gdy produkt jest zapisywany przez back office. Gdy edytujesz produkt i klikniesz Zapisz, PrestaShop reindeksuje ten konkretny produkt, aktualizując jego wpisy w ps_search_word i ps_search_index. Działa to dobrze przy codziennym zarządzaniu produktami.

Jednak automatyczne indeksowanie nie pokrywa każdego scenariusza. Istnieje kilka typowych sytuacji, w których konieczna jest pełna reindeksacja.

Masowe importy produktów

Gdy importujesz produkty przez CSV, proces importu może nie wyzwalać hooków indeksowania wyszukiwania dla każdego produktu. Jest to szczególnie częste przy dużych importach, gdzie optymalizacje wydajnościowe pomijają nieistotne kroki przetwarzania. Po masowym imporcie nowe produkty mogą istnieć w katalogu, ale być całkowicie niewidoczne w wyszukiwaniu sklepowym.

Bezpośrednie modyfikacje bazy danych

Jeśli Ty lub moduł modyfikujecie dane produktów bezpośrednio w bazie danych (omijając model obiektowy PrestaShop), indeks wyszukiwania nie zostanie zaktualizowany. Dotyczy to aktualizacji SQL nazw produktów, opisów lub innych indeksowanych pól. Każda migracja bazy danych, czyszczenie danych lub zewnętrzne narzędzie synchronizacji, które zapisuje bezpośrednio do ps_product_lang, pozostawi indeks wyszukiwania nieaktualnym.

Zmiany języków

Dodanie nowego języka do sklepu wymaga pełnej reindeksacji, ponieważ indeks wyszukiwania jest specyficzny dla języka. Istniejące produkty potrzebują tokenizacji i dodania do indeksu treści w nowym języku. Podobnie, jeśli edytujesz treść produktu w konkretnym języku (zwłaszcza przez operacje masowe), reindeksacja zapewnia, że zmiany są odzwierciedlone w wyszukiwaniu.

Zmiany konfiguracji wag wyszukiwania

Gdy zmieniasz wartości wag przypisane do różnych pól produktu (więcej na ten temat poniżej), istniejące wpisy indeksu zachowują swoje stare wagi. Reindeksacja przelicza wszystkie wagi przy użyciu nowej konfiguracji.

Instalacje lub aktualizacje modułów

Niektóre moduły modyfikują struktury danych produktów lub dodają wyszukiwalne pola. Po zainstalowaniu lub zaktualizowaniu takich modułów reindeksacja zapewnia, że nowe lub zmodyfikowane dane są uwzględnione w indeksie wyszukiwania.

Uszkodzony indeks

Awarie bazy danych, nieudane migracje lub przerwane operacje indeksowania mogą pozostawić indeks wyszukiwania w niespójnym stanie. Symptomy obejmują produkty, które powinny pojawiać się w wynikach wyszukiwania, ale się nie pojawiają, produkty pojawiające się dla zupełnie błędnych terminów wyszukiwania lub wyszukiwanie zwracające brak wyników w ogóle. Pełna reindeksacja odbudowuje indeks od podstaw, rozwiązując te niespójności.

Jak reindeksować produkty

Metoda z poziomu back office

Przejdź do Parametry sklepu > Wyszukiwanie w back office PrestaShop. Na górze strony znajdziesz sekcję "Indeksowanie" z opcjami odbudowy indeksu wyszukiwania. Zazwyczaj dostępne są dwie opcje: dodanie do indeksu produktów, które jeszcze nie zostały zaindeksowane (przyrostowa) lub odbudowa całego indeksu od podstaw (pełna reindeksacja).

Dla większości scenariuszy rozwiązywania problemów wybierz pełną odbudowę. Opcja przyrostowa dodaje tylko brakujące produkty i nie aktualizuje istniejących wpisów, które mogą zawierać nieaktualne dane.

Metoda z poziomu back office działa dobrze dla małych i średnich katalogów (do kilku tysięcy produktów). Dla większych katalogów może wystąpić timeout z powodu limitu czasu wykonania PHP, co czyni metodę CLI konieczną.

Polecenie CLI do reindeksacji

Dla dużych katalogów lub zautomatyzowanych procesów użyj wiersza poleceń do uruchomienia reindeksacji. W PrestaShop 1.7 i nowszych polecenie to:

php bin/console prestashop:search-index:rebuild

Dla PrestaShop 1.6 wywołujesz bezpośrednio skrypt indeksowania. Dokładna ścieżka zależy od instalacji, ale logika indeksowania znajduje się w klasie Search.

Metoda CLI nie ma tych samych ograniczeń timeoutu co interfejs webowy. Dla bardzo dużych katalogów (dziesiątki tysięcy produktów w wielu językach) reindeksacja może trwać kilka minut. Postęp można monitorować przez wyświetlane informacje.

Jeśli uruchamiasz PrestaShop w Dockerze, wykonaj polecenie wewnątrz kontekstu kontenera, w którym dostępny jest PHP i baza kodu PrestaShop. Upewnij się, że uruchamiasz je jako użytkownik serwera WWW, aby uniknąć problemów z uprawnieniami plików cache, które mogą być generowane podczas procesu.

Automatyzacja reindeksacji

Jeśli Twój sklep korzysta z automatycznych importów produktów lub zewnętrznej synchronizacji danych, zaplanuj okresową reindeksację jako zadanie cron. Nocna reindeksacja zapewnia, że produkty dodane lub zmodyfikowane przez zautomatyzowane procesy będą wyszukiwalne następnego dnia. Wpis cron wywołałby to samo polecenie CLI według harmonogramu.

Pamiętaj, że reindeksacja krótkotrwale blokuje tabele wyszukiwania podczas odbudowy. W przypadku intensywnie odwiedzanego sklepu zaplanuj reindeksację na godziny o niskim ruchu, aby uniknąć wpływu na dostępność wyszukiwania dla aktywnych klientów.

Konfiguracja wag: Kontrola trafności wyszukiwania

PrestaShop pozwala skonfigurować, jaką wagę mają różne pola produktu w wynikach wyszukiwania. Jest to jedna z najpotężniejszych i najbardziej niedocenianych funkcji wbudowanego systemu wyszukiwania.

Dostępne pola wag

Konfiguracja wag znajduje się w Parametry sklepu > Wyszukiwanie. Możesz przypisać wagę (zazwyczaj od 1 do 10, choć wyższe wartości również działają) do każdego z tych pól produktu:

Nazwa produktu: Powinna zazwyczaj mieć najwyższą wagę. Gdy klient szuka produktu po nazwie, produkt o tej dokładnej nazwie powinien pojawić się na pierwszym miejscu.

Referencja: Kody referencyjne produktów są często używane przez klientów B2B, którzy znają dokładny SKU, którego potrzebują. Umiarkowana waga zapewnia, że wyszukiwanie po referencji działa dobrze, nie przytłaczając wyszukiwania po nazwie.

Krótki opis: Krótki opis często zawiera kluczowe zalety sprzedażowe i cechy produktu. Odpowiednia jest umiarkowana waga.

Opis: Pełny opis zawiera najwięcej tekstu, a zatem najwięcej potencjalnych dopasowań słów kluczowych. Jednak ponieważ zawiera tak dużo tekstu, wysoka waga może powodować nieistotne dopasowania, gdy wyszukiwany termin pojawia się przypadkowo w długim opisie. Zalecana jest niższa waga w porównaniu z nazwą produktu.

Kategoria: Uwzględnienie nazw kategorii w wyszukiwaniu pozwala klientom znajdować produkty po terminach kategorii, nawet gdy te terminy nie pojawiają się w tekście samego produktu.

Marka (producent): Klienci często szukają po nazwie marki. Umiarkowana do wysokiej waga zapewnia, że wyszukiwania po marce zwracają trafne wyniki.

Tagi: Tagi to jawnie przypisane terminy wyszukiwania dla produktów. Wysoka waga tagów daje bezpośrednią kontrolę nad tym, które produkty pojawiają się dla konkretnych zapytań wyszukiwania.

Atrybuty: Wartości atrybutów produktu (rozmiar, kolor, materiał) mogą być uwzględnione w indeksie wyszukiwania. To pozwala na wyszukiwania jak "czerwony XL", które zwracają produkty z takimi kombinacjami atrybutów.

Cechy: Wartości cech produktu (waga, wymiary, rodzaj materiału) również mogą być indeksowane.

Strategia wagowa

Rozsądna konfiguracja początkowa mogłaby być następująca: nazwa produktu na 6, referencja na 4, krótki opis na 3, opis na 1, kategoria na 2, producent na 3, tagi na 4, atrybuty na 2, cechy na 2. Jednak optymalne wagi zależą wyłącznie od Twojego katalogu i zachowań wyszukiwania Twoich klientów.

Jeśli Twoi klienci często szukają po SKU lub numerze referencyjnym, zwiększ wagę referencji. Jeśli wyszukiwania po marce są ważne, zwiększ wagę producenta. Jeśli stwierdzisz, że długie opisy powodują nieistotne wyniki o wysokim rankingu, zmniejsz wagę opisu lub ustaw ją na zero, aby całkowicie wykluczyć opisy z indeksu.

Po zmianie wag zawsze wykonaj pełną reindeksację, aby nowe wartości zaczęły obowiązywać dla wszystkich produktów.

Typowe problemy z wyszukiwaniem i ich rozwiązania

Produkty nie pojawiające się w wynikach wyszukiwania

To najczęstsza skarga dotycząca wyszukiwania. Produkt istnieje w katalogu, ale wyszukiwanie go po nazwie nie zwraca wyników. Przyczyny obejmują: produkt został dodany przez import, który nie wyzwolił indeksowania, produkt jest wyłączony lub niedostępny, a wyszukiwanie jest skonfigurowane do wykluczania takich produktów, lub indeks wyszukiwania jest uszkodzony.

Rozwiązanie: Najpierw zweryfikuj, czy produkt jest aktywny i widoczny. Następnie uruchom pełną reindeksację. Jeśli produkt nadal się nie pojawia, sprawdź, czy nazwa produktu zawiera znaki specjalne, które mogą być usuwane podczas tokenizacji, i sprawdź, czy ustawienie minimalnej długości słowa (w konfiguracji wyszukiwania) nie wyklucza krótkich słów z nazwy produktu.

Nieprawidłowe produkty na pierwszych pozycjach

Gdy wyszukanie "niebieski widget" zwraca produkt o nazwie "uchwyt na widgety" przed faktycznym produktem "niebieski widget", zazwyczaj jest to problem konfiguracji wag. Produkt, który ma wyższy ranking, zgromadził więcej łącznej wagi we wszystkich indeksowanych polach. Być może "widget" pojawia się wielokrotnie w opisie produktu uchwytu, a przy wysokiej wadze opisu te wystąpienia przeważają nad pojedynczym dopasowaniem w nazwie produktu.

Rozwiązanie: Dostosuj wagi pól, aby priorytetyzować nazwę produktu. Ustaw wagę nazwy produktu znacząco wyższą niż wagę opisu. Reindeksuj po wprowadzeniu zmian.

Wyszukiwanie zwraca zbyt wiele nieistotnych wyników

Dzieje się tak, gdy waga opisu jest zbyt wysoka lub gdy popularne słowa pojawiają się w wielu opisach produktów. Wyszukanie "premium" zwraca każdy produkt, którego opis zawiera słowo "premium", nawet gdy nie jest to definiująca cecha tych produktów.

Rozwiązanie: Zmniejsz wagę opisu lub użyj funkcji czarnej listy słów, aby wykluczyć popularne, nierozróżniające słowa z indeksu. Czarna lista jest konfigurowana w Parametry sklepu > Wyszukiwanie i pozwala określić słowa, które powinny być ignorowane podczas indeksowania.

Wyszukiwanie nie znajduje częściowych dopasowań

Wbudowane wyszukiwanie PrestaShop nie obsługuje prawdziwego dopasowania rozmytego. Jeśli klient szuka "but", nie znajdzie produktów zawierających tylko słowo "buty", chyba że stemming lub aliasy obsłużą tę odmianę. Jest to fundamentalne ograniczenie podejścia opartego na indeksie słów.

Rozwiązanie: Użyj funkcji aliasów, aby mapować popularne odmiany ("but" na "buty", "TV" na "telewizor"). Dla bardziej kompleksowego dopasowania częściowego rozważ zewnętrzne rozwiązanie wyszukiwania takie jak Elasticsearch.

Znaki akcentowane powodujące braki w wynikach

PrestaShop normalizuje znaki akcentowane podczas indeksowania (na przykład konwertując "cafe" i "café" do tej samej formy bazowej). Jeśli ta normalizacja nie działa prawidłowo, wyszukiwania z akcentami lub bez nich mogą dawać różne wyniki.

Rozwiązanie: Zweryfikuj, że konfiguracja wyszukiwania ma włączone usuwanie akcentów. Reindeksuj po weryfikacji. Jeśli problem utrzymuje się, sprawdź zestaw znaków i collation bazy danych, ponieważ niezgodne kodowania mogą zakłócać normalizację tekstu.

Optymalizacja wydajności wyszukiwania

Dla sklepów z dużymi katalogami (ponad 10 000 produktów) wydajność wyszukiwania może stać się problemem. Wbudowane wyszukiwanie wykonuje zapytania do bazy danych na tabelach indeksu przy każdym zapytaniu wyszukiwania, a przy dużym indeksie te zapytania mogą stawać się wolne.

Indeksy bazy danych

Upewnij się, że tabele ps_search_word i ps_search_index mają prawidłowe indeksy bazy danych. PrestaShop tworzy je domyślnie, ale jeśli tabele zostały zmienione lub odbudowane, indeksy mogą brakować. Kluczowe indeksy to te na id_word i id_lang w ps_search_word oraz na id_product i id_word w ps_search_index.

Minimalna długość słowa

Ustawienie minimalnej długości słowa kontroluje najkrótsze słowo, które zostanie zaindeksowane. Domyślnie jest to zazwyczaj 3 znaki, co oznacza, że jedno- i dwuznakowe słowa są wykluczone. Zwiększenie tego do 4 zmniejsza rozmiar indeksu i może poprawić szybkość wyszukiwania, ale oznacza, że wyszukiwania krótkich terminów jak "XL" czy "TV" nie będą działać. Zbalansuj rozmiar indeksu z wymaganiami wyszukiwania.

Czarna lista słów

Dodanie popularnych słów ("i", "w", "na", "do") do czarnej listy znacząco zmniejsza rozmiar indeksu, ponieważ te słowa pojawiają się w prawie każdym opisie produktu. Mniejsze tabele indeksu oznaczają szybsze zapytania.

Optymalizacja tabel

Po pełnej reindeksacji uruchom OPTIMIZE TABLE ps_search_word, ps_search_index w MySQL. Proces reindeksacji usuwa i ponownie wstawia dużą liczbę wierszy, co może pozostawić tabele we fragmentarycznym stanie. Optymalizacja odzyskuje tę przestrzeń i poprawia wydajność zapytań.

Elasticsearch jako alternatywa

Dla sklepów, które przerosły wbudowane wyszukiwanie PrestaShop, Elasticsearch zapewnia znaczącą aktualizację zarówno jakości wyszukiwania, jak i wydajności. Elasticsearch to dedykowany silnik wyszukiwania działający jako oddzielna usługa, oferujący funkcje, których wbudowane wyszukiwanie oparte na MySQL nie jest w stanie zapewnić.

Co dodaje Elasticsearch

Dopasowanie rozmyte pozwala Elasticsearch znajdować wyniki nawet gdy termin wyszukiwania jest błędnie napisany. Wyszukanie "skóra" nadal znajdzie produkty zawierające "skórzany". Stemming redukuje słowa do ich formy podstawowej, więc "bieganie", "biegnie" i "biegał" pasują do produktów zawierających dowolną z tych odmian. Obsługa synonimów pozwala definiować relacje między słowami ("sofa" i "kanapa") na poziomie silnika wyszukiwania, a nie przez ręczne aliasy.

Wyszukiwanie fasetowe (filtrowanie wyników po atrybutach takich jak zakres cenowy, kolor, marka) jest drastycznie szybsze z Elasticsearch, ponieważ jest zaprojektowany dokładnie do tego typu zapytań agregujących. Podpowiedzi autouzupełniania i funkcje "czy chodziło Ci o" to również natywne możliwości Elasticsearch.

Pod względem wydajności Elasticsearch obsługuje duże katalogi (ponad 100 000 produktów) z czasami odpowiedzi poniżej sekundy, ponieważ używa odwróconych indeksów zoptymalizowanych pod wyszukiwanie pełnotekstowe, w przeciwieństwie do MySQL, który jest głównie zaprojektowany dla danych relacyjnych.

Integracja z PrestaShop

Kilka modułów PrestaShop zapewnia integrację z Elasticsearch. Te moduły zazwyczaj zastępują domyślny kontroler wyszukiwania takim, który odpytuje Elasticsearch zamiast tabel wyszukiwania MySQL. Dane produktów są synchronizowane z PrestaShop do Elasticsearch albo w czasie rzeczywistym (przy zapisie produktu), albo poprzez okresową synchronizację wsadową.

Uruchomienie Elasticsearch wymaga dedykowanego serwera lub kontenera z odpowiednią ilością RAM (minimum 2 GB dla małych katalogów, więcej dla większych). Dodaje to złożoność operacyjną, ponieważ masz teraz kolejną usługę do monitorowania i utrzymywania. Dla wielu małych i średnich sklepów wbudowane wyszukiwanie z prawidłową konfiguracją wag i regularną reindeksacją jest wystarczające.

Kiedy rozważyć Elasticsearch

Rozważ Elasticsearch, gdy Twój katalog przekracza 10 000 produktów i wydajność wyszukiwania spada, gdy klienci często błędnie piszą terminy wyszukiwania i oczekują dopasowania rozmytego, gdy potrzebujesz zaawansowanych funkcji takich jak autouzupełnianie czy filtrowanie fasetowe, lub gdy jakość wyszukiwania jest przewagą konkurencyjną Twojego biznesu (sklepy B2B z złożonymi katalogami produktów, na przykład).

Lista kontrolna reindeksacji

Gdy wyszukiwanie nie działa prawidłowo w Twoim sklepie PrestaShop, postępuj zgodnie z tym procesem diagnostycznym i naprawczym. Po pierwsze, zweryfikuj, że problematyczne produkty są aktywne, widoczne i dostępne (jeśli wyszukiwanie wyklucza produkty niedostępne). Po drugie, sprawdź konfigurację wag wyszukiwania i upewnij się, że odpowiada Twoim priorytetom. Po trzecie, uruchom pełną odbudowę indeksu wyszukiwania z back office lub CLI. Po czwarte, wyczyść cache PrestaShop po reindeksacji. Po piąte, przetestuj wyszukiwanie konkretnymi terminami, aby zweryfikować naprawę. Po szóste, jeśli problemy utrzymują się, sprawdź tabele ps_search_word i ps_search_index bezpośrednio, aby zweryfikować, czy problematyczne produkty mają wpisy. Po siódme, jeśli indeks wydaje się prawidłowy, ale wyszukiwanie nadal zawodzi, zbadaj logikę kontrolera wyszukiwania i wszelkie moduły, które go nadpisują.

Regularna reindeksacja, połączona z przemyślaną konfiguracją wag i dobrze utrzymaną listą aliasów, utrzymuje wbudowane wyszukiwanie PrestaShop w niezawodnym działaniu dla większości sklepów. Dla tych, którzy potrzebują więcej, Elasticsearch zapewnia ścieżkę aktualizacji bez konieczności zmiany platformy.

Czy ta odpowiedź była pomocna?

Masz jeszcze pytania?

Can't find what you're looking for? Send us your question and we'll get back to you quickly.

Loading...
Back to top