Opis działania oraz opis obsługi wyszukiwarki PrestaShop w panelu administratora z wyjaśnieniem poszczególnych składowych.
Jak działa wyszukiwarka PrestaShop
Precyzja wyszukiwania wyszukiwarki PrestaShop
Indeksy produktów z myślnikami, minusami, -, dash
Konfiguracja wyszukiwarki z poziomy panelu administratora:
Wagi pól do rankingu wyszukiwania
Deklaracja słów, minimalnej długości, oraz rodzaju szukania
Indeksowanie – przebudowa indeksu PrestaShop
W niektórych przypadkach wyszukiwarka PrestaShop zwraca wyniki nie takie jak byśmy oczekiwali. Poukładane na pierwszy rzut oka nieprecyzyjnie/bez logicznego sensu.
Określane jako:
– problem z wyszukiwarką produktów PrestaShop
– wyszukiwarka PrestaShop nie działa
– wyniki wyszukiwania PrestaShop są nie precyzyjne
– wyniki wyszukiwania są bez sensu (lub temu podobne zwroty).
Postaramy się wytłumaczyć działanie wyszukiwarki PrestaShop, żeby lepiej zrozumieć dlaczego i jak układają się produkty. Dlaczego produkty które nie powinny się pojawiać – pokazują się na pierwszym miejscu. Pomimo, że wg. nas produkt nie ma nic wspólnego z kryteriami jakie wprowadziliśmy do wyszukania.
W poniższym opisie podeprzemy się przykładem strony jednego z klientów – gdzie po wpisaniu frazy „tusz hp” produkty „tusz canon” zaczęły pojawiać się wyżej niż – tusze hp.
Na poniższym zdjęciu prezentujemy przykładowy screen wyników wyszukiwania.
Specyfika sklepu internetowego:
– Branża części komputerowych. Liczba pozycji asortymentowych wynosi ponad 9500 pozycji.
– Sklep zintegrowany z Wf-mag / Wapro mag.
– W nazwach produktów pojawiają się nazwy modeli – tak by można było łatwo odszukać produkt w programie do faktur.
Opis problemu wyszukiwania:
Po wpisaniu frazy „tusz hp”
Wyszukiwarka zwraca na 1134 rekordów.
Z czego w bazie mamy raptem 441 wszystkich tuszy do różnych drukarek.
A tuszy do HP 180 rekordów.
Wyniki zwrócone przez wyszukiwarkę PrastaShop są kompletnie odmienne z naszymi oczekiwaniami.
Tonery innych modeli pomieszane z różnymi produktami. Dopiero na którejś pozycji pojawiają się tusze do drukarki hp których szukamy.
Przyjrzyjmy się zapytaniu SQL wysyłanemu do bazy MySQL – podczas wyszukiwania produktu w sklepie internetowym na silniku PrestaShop:
SELECT p.*, product_shop.*, stock.out_of_stock, IFNULL(stock.quantity, 0) as quantity,
pl.`description_short`, pl.`available_now`, pl.`available_later`, pl.`link_rewrite`, pl.`name`,
image_shop.`id_image` id_image, il.`legend`, m.`name` manufacturer_name ,(
SELECT SUM(weight)
FROM ps_search_word sw
LEFT JOIN ps_search_index si ON sw.id_word = si.id_word
WHERE sw.id_lang = 1
AND sw.id_shop = 1
AND si.id_product = p.id_product
AND (sw.word LIKE '%tusz%' OR sw.word LIKE '%hp%')
) position,
DATEDIFF(
p.`date_add`,
DATE_SUB(
"2019-12-02 00:00:00",
INTERVAL 30 DAY
)
) > 0 new
FROM ps_product p
INNER JOIN ps_product_shop product_shop
ON (product_shop.id_product = p.id_product AND product_shop.id_shop = 1)
INNER JOIN `ps_product_lang` pl ON (
p.`id_product` = pl.`id_product`
AND pl.`id_lang` = 1 AND pl.id_shop = 1
)
LEFT JOIN ps_stock_available stock
ON (stock.id_product = `p`.id_product AND stock.id_product_attribute = 0 AND stock.id_shop = 1 AND stock.id_shop_group = 0 )
LEFT JOIN `ps_manufacturer` m FORCE INDEX (PRIMARY)
ON m.`id_manufacturer` = p.`id_manufacturer`
LEFT JOIN `ps_image_shop` image_shop FORCE INDEX (id_product)
ON (image_shop.`id_product` = p.`id_product` AND image_shop.cover=1 AND image_shop.id_shop=1)
LEFT JOIN `ps_image_lang` il ON (image_shop.`id_image` = il.`id_image` AND il.`id_lang` = 1)
WHERE p.`id_product` IN (45,46,48,49,50,51,52,53, [USUNIĘTE ŻEBY POPRAWIĆ CZYTELNOŚĆ ZAPYTANIA] ,9403,9404)
GROUP BY product_shop.id_product
ORDER BY position desc
LIMIT 0,24
Możemy odczytać, że pozycje są układane w sposób malejący (ORDER BY position desc) wg. kolumny wynikowej position, która jest sumą wag które narzuciliśmy w panelu administracyjnym naszego sklepu internetowego : Konfiguruj->Preferencje->Szukaj->Waga.
Dla standardowego zapytania SQL (Prestashop 1.7.5.1) zwraca wyniki jak poniższa tabela:
W naszym przypadku najwyższa wartość to 102 (niestety produkt nie jest tuszem – wyszukiwarka prestashop zwróciła na pierwszym miejscu toner).
Dzieje się tak dlatego, że wyszukiwarka prestashop buduje indeks do wyszukiwania. W tabeli ps_search_word znajdują się wszystkie słowa występujące w bazie produktów. Ilość tych słów jest ograniczana minimalną długłością liter występujących w słowie. Wartość można zdeklatować w Konfiguruj->Preferencje->Szukaj->Szukaj . Domyślnie parametr jest ustawiony na 3 litery.W naszym przypadku słowo „HP” które ma 2 litery było by pomijane przy wyszukiwaniu.
Zweryfikujmy zatem tabelę ps_search_index odpytując bazę MySQL.
Jak widać zapytanie w dopasowaniu przybliżonym (LIKE '%hp%’) nasz produkt zwrócił aż 14 rekordów dając wartość 10*9+3*1=102.
Pomimo, że produkt nie jest tuszem tylko tonerem jest na pierwszym miejscu. Ponieważ w nazwie (dla którego wagę mamy ustawioną na najwyższej randze) słowo „hp” w dopasowaniu przybliżonym pojawiło się aż 10 razy. Dając najwyższą punktację i stawiając w naszym przypadku „toner” przed „tuszem” (który pasuje do mniejszej liczby modeli).
Rozwiązanie w naszym przypadku było dość oczywiste.
Zapytanie SQL musimy zmodyfikować tak żeby w nazwie produktu musiała pojawić się lista słów w dopasowaniu przybliżonym. Okazało się wystarczające.
Aktualnie (bez modyfikacji pliku Search.php) PrestaShop na najwyższej pozycji stawia produkt którego wyszukiwane słowo kluczowe powtórzyło się najwięcej razy przy uwzględnieniu wagi słowa kluczowego. Kiedyś w podobny sposób ranking budowała wyszukiwarka Google – ale z oczywistych przyczyn zostało to zabronione: https://support.google.com/webmasters/answer/66358?hl=pl .
W przypadku występowania myślnika lub myślników (znaku – [minusa]) wyszukiwarka PrestaShop dzieli słowo w miejscu występowania myślnika i zaczyna przeszukiwanie bazę dla zestawu fraz.
Dla przykładu jeżeli szukamy produktu o indeksie:
AAA-11111
Zostanie przeszukana baza dla takich słów kluczowych: AAA lub 11111 lub AAA11111 lub AAA-11111 .
Dlatego jeśli chcemy wyszukiwać precyzyjniej produkty po indeksie/numerze katalogowym produktu musimy wprowadzić odpowiednie obostrzenia na pole reference tabeli ps_product w przeciwnym razie możemy spodziewać się w wynikach wyszukiwania produktów o indeksach:
AAA-22222
BBB-11111
AAA-11111
W kolejności zgodnej ze zdefiniowanymi wagami wyszukiwarki.
Rozwiązanie:
– Do zapytania SQL można dodać treść oryginalną z myślnikiem odwołującą do pola reference w zapytaniu przybliżonym do wyrażenia.
– Za komentować w pliku PHP kod odpowiadający za przekształcenie słowa z myślnikiem.
Konfiguracja wyszukiwarki w PrestaShop nie jest niczym skomplikowanym. Po zalogowaniu do panelu administracyjnego sklepu należy przejść do sekcji konfiguruj wybrać Preferencje->Szukaj.
Widoczne sekcje zostaną omówione od samego dołu bo wg. nas w tej kolejności wartości powinny być ustawiane w momencie pierwszej konfiguracji.
W tym miejscu deklarujemy co jest dla nas najważniejsze.
Do wyboru mamy:
Przykład obliczania przy założeniu że wartość Waga nazwy produktu będzie równa 1, Waga indeksu = 6, Waga krótkiego opisu = 8, szukanej frazy „hp 1010”. Dla bazy posiadającej rekordy:
To drugi rekord będzie pierwszy ponieważ fraza pojawiła się w polu o największej wadze. Za słowo hp – 8 + słowo 1010 – 8 = 16 [pkt] . Pierwszy rekord otrzyma za nazwę hp = 1[pkt] + 1010 = 1[pkt] oraz za indeks (przy założeniu wyszukiwania przybliżonego) hp = 6[pkt] + 1010 = 6[pkt] co nam łącznie daje 14.
14<16
Zgodnie z ORDER BY position desc
opisanej w sekcji jak działa wyszukiwarka PrestaShop to kabel USB pojawi się wyżej niż Drukarka HP 1010 – dlatego tak ważne jest odpowiednie dobranie wag w zależności do rodzaju treści jaki znajduje się w bazie danych sklepu internetowego.
Ad1. Szukaj używając części słowa – wartość zdeklarowana na TAK odpowiada za modyfikację zapytania SQL w jak na przykładzie (sw.word LIKE '%hp%' OR ...)
Baza na zapytanie „hp” zwróci hp1010 oraz hp 1010
Ad3. Minimalna długość słowa – w zależności od rodzaju produktów np. w przypadku producenta hp konieczne jest zmniejszenie domyślnej wartości trzech liter w słowie wyszukiwanym na dwie litery. W innym razie słowo w zapytaniu będzie pomijane.
Ad4. Słowa zabronione – Słowa które nie będą brały udziału przy wyszukiwaniu. Słowa nazw,opisów, … produktów – z uwzględnieniem wag większych od 0 są zapisywane do tabeli ps_search_word. Zostały wyszczególnione najpopularniejsze ale mogą pojawić się inne w zależności opisów i specyfiki danej bazy. Załóżmy, że nie wykluczylibyśmy „do” przy wyszukaniu frazy „rolka do hp” mógłby pojawić się opis produktu nie będącego rolką i nie będącą produktem hp ale w opisie słowo „do” zostało by użyte kilkanaście(kilkadziesiąt) razy. Warto rozważyć listę słów w oparciu o produkty które znajdują się w sklepie.
Produkty będą wyszukiwane pod warunkiem, że są w indeksie wyszukiwania tabeli ps_search_index w naszym przypadku dla 9500 produktów baza ma 250 000 rekordów (pomimo że produkty nie mają jeszcze opisów). Każde słowo z nazwy, indeksu, opisu – które spełnia nasze parametry powinno się tam znaleźć. Przykład zapytania w którym zostaje odpytana bazę o wielkość sumy wartości dla słowa przedstawia akapit Jak działa wyszukiwarka PrestaShop.
Co należy pamiętać:
– Jeśli wyszukiwarka nie wyszukuje produktów – należy zacząć od przebudowy indeksu wyszukiwarki.
– Jeśli oferta zmienia się często – zadanie przebudowy indeksu można wywołać w zadaniach CRON serwera Apache o określonych porach w zależności od potrzeby (raz dziennie, co godzinę, pół godziny).
Prawdopodobnie dla systemów zintegrowanych z zewnętrznymi zasobami przebudowa indeksu będzie wywoływana automatycznie w momencie synchronizacji produktów.
Wyszukiwarka PrestaShop jest przewidywalna i powtarzalna. Dobre przemyślenie nazw i opisów pozwoli na precyzyjne wyszukiwanie produktów. W przeciwnym razie zawsze można zmodyfikować algorytm PrestaShop – tak aby spełniał oczekiwania. Należy pamiętać, że nie jest to wyszukiwarka Google. Nie potrafi przewidzieć naszych intencji czy zachowań behawioralnych.
Pytania?
Kontakt