Jump to content
  • 0

Wyszukiwanie produktów z 'ł'


moyeco

Question

Cześć, mam problem z wyszukiwaniem produktów z 'ł' w tytule. Nie wyszukuje ich zarówno po wprowadzeniu w pole wyszukiwania słowa z polskim znakiem, jak i jego odpowiednikiem nieogonkowym ;)  Np. produkt w bazie danych "masło orzechowe", po wprowadzeniu "masł" czy "masl" wyszukuje tylko "maślaki" ;) Produkty wprowadzane do bazy zarówno z palca, jak i importowane z csv czy xml'a. Co ciekawsze produkt "maska do włosów łopianowa" to jedyny produkt wyszukiwany po wprowadzeniu "włosów" czy 'wlosow' po wbiciu 'lopianowa'/'łopianowa' już nie szuka.

Presta 1.6.1.16, www.moyeco.pl

Jakieś pomysły?

Link to comment
Share on other sites

17 answers to this question

Recommended Posts

  • 0

indeksowałem. Nie sądzę by wagi miały tu znaczenie. sytuacja dotyczy tylko produktów z "ł" i po wpisaniu "ł" w wyszukiwarkę, inne produkty z polskimi znakami są dobrze wyszukiwane. Gdy wpisuję "mas" wtedy wyświetla mi się podgląd produktów "masło", jednak po wpisaniu "masł" lub "masl" wszystko znika.

Link to comment
Share on other sites

  • 0
3 godziny temu, moyeco napisał:

Nie sądzę by wagi miały tu znaczenie.

Zgadza się. Wagi nic do tego nie mają.

Czy w bazie wszystkie literki ł masz zapisane jako ł w kodowaniu UTF-8, a nie jako ASCII, czyli ł ?

Przy importach z różnych zewnętrznych xml czy csv różnie to może być.

 

Link to comment
Share on other sites

  • 0

A jak sprawdzić to kodowanie w bazie? W każdym razie, tak jak pisałem część produktów była importowana część wbijana z palca i problem występuje wszędzie. Co więcej po próbie wyszukanie "włosów" wyszukuje tylko "maskę do włosów łopianową", a po wpisaniu "łopianową" nic nie wyświetla.
Wyszukiwałem też produkty bezpośrednio w bazie, wypluwa wyniki tylko po wpisaniu zwrotu z "ł", np: 'migdał%', zwrot 'migdal%' daje zaś zerowe wyniki. to inaczej niż w przydaku innych polskich znaków gdzie np: 'ryż%' i 'ryz%' dają te same rezultaty

 

Link to comment
Share on other sites

  • 0

Jednak jest to błąd w preście i dotyczy tylko właśnie polskiej literki "ł".

Klasa search używa metody replaceAccentedChars z klasy Tools.

Litera l jest podstawiana dla takich znaków narodowych: /* l  */ '/[\x{013A}\x{013C}\x{013E}\x{0140}\x{0142}\x{043B}]/u',

A polskie małe ł ma kod 0141: http://www.tachyonsoft.com/uc0001.htm#U0141

Natomiast dla dużego L jest błędnie: /* L  */ '/[\x{0139}\x{013B}\x{013D}\x{0139}\x{0141}\x{041B}]/u',

Bo duże Ł to 0142.

Trzeba poprawić metodę replaceAccentedChars w klasie Tools.

 

Edited by e_com
poprawka (see edit history)
Link to comment
Share on other sites

  • 0

Niestety nie podziałało ;(. Linia 1471 zmieniona wg Twoich wskazówek, indeks odbudowany i nic. Zresztą zauważyłem, że wskazany przez Ciebie błąd polega tylko na pomyleniu 'Ł' z 'ł', a ponieważ przy wyszukiwaniu Ł=ł więc to też nie powinno mieć znaczenia. Niemniej ponieważ nazwy mamy wpisane wielkimi znakami jakiegoś błędu doszukiwałbym się w lini 1510.   Zamieniłem więc x{0142} na x{0141} w 1471 i odwrotnie w 1510 i mam tak
1471 -

/* l  */ '/[\x{013A}\x{013C}\x{013E}\x{0140}\x{0141}\x{043B}]/u', 

1510 -

/* L  */ '/[\x{0139}\x{013B}\x{013D}\x{0139}\x{0142}\x{041B}]/u',

niestety efekt nadal żaden ;(

 

Link to comment
Share on other sites

  • 0

Lini 1510 nie modyfikuj, bo w oryginale jest poprawnie.

To już wygląda na jakiś błąd tej wyszukiwarki z Twojego szablonu. Najszybciej to sprawdzisz instalując natywną wyszukiwarkę od presty, czyli "blocksearch".

Jeśli "blocksearch" będzie wyszukiwać poprawnie to już wiesz co masz zepsute.

 

Link to comment
Share on other sites

  • 0
48 minut temu, moyeco napisał:

ale bez modyfikacji 1510 miałbym w 1471-  x{0141}\x{0142} , a w 1510 też x{0141}

 

I tak powinno być.

Logika tego algorytmu jest taka, że wszystkie litery L, Ł, ł są zamieniane w indeksie tylko na małe l.

Powala to wyszukiwać frazy "niechlujne", czyli czy wpiszemy szukane słowo małymi literami czy dużymi, czy z polskim znakiem czy bez, to jest znajdowane.

W aktualizacji do 1.6.1.17 była właśnie poprawka dotycząca wyszukiwania, także proponuję zaktualizować prestę do ostatniej wersji.

Możesz też w bazie skasować wszystkie rekordy z tabel PREFIX_search_index i PREFIX_search_word i wygenerować ponownie indeks.

Moduł masz "blocksearch" ale templatki i javascript modułu są już jakieś modyfikowane w szablonie, także tam mogą być bugi.

 

Link to comment
Share on other sites

  • 0

Wielkość liter nie ma znaczenia więc to w jakiej kolejności wspomniana funkcja zamienia wielką literę a w jakiej małą nie ma znaczenia.

W 1.6.1.17 nie kojarzę żadnych zmian w mechanizmie wyszukiwarki - aktualizacja sklepu nic w tym nie zmieni, tu wspomniany plik https://github.com/PrestaShop/PrestaShop/blob/1.6.1.x/classes/Tools.php.

Jeśli waga nazwy produktu będzie ustawiona na 0 to sklep nie będzie wyszukiwał po nazwie produktu.

W 1.6.1.16 są wyszukiwane produkty z ł w nazwie - sprawdzałem zanim napisałem pierwszą odpowiedź.

Link to comment
Share on other sites

  • 0
22 minuty temu, Piotr K. napisał:

W 1.6.1.17 nie kojarzę żadnych zmian w mechanizmie wyszukiwarki

 

https://www.prestashop.com/en/system/files/ps_releases/changelog_1.6.1.17.txt

#8199: Speed up search queries

Zdecydowane poprawienie szybkości wyszukiwania NA PEWNO jest naprawą mechanizmu wyszukiwania. Plus naprawa kilkunastu innych błędów.

26 minut temu, Piotr K. napisał:

Jeśli waga nazwy produktu będzie ustawiona na 0 to sklep nie będzie wyszukiwał po nazwie produktu.

 

A jaki jest w tym sens? Przecież chodzi o poprawne wyszukiwanie, a nie brak wyszukiwania :)

 

Link to comment
Share on other sites

  • 0
3 hours ago, e_com said:

#8199: Speed up search queries

Zdecydowane poprawienie szybkości wyszukiwania NA PEWNO jest naprawą mechanizmu wyszukiwania.

 

Nie jest. W ramach tego błędu jedyne co zostało zrobione to zmiana indeksów w 1 tabeli. Żaden plik presty nie został przy tym zmieniony i nie ma to żadnego wpływu na wyszukiwanie poza prędkością.
 

3 hours ago, e_com said:

A jaki jest w tym sens? Przecież chodzi o poprawne wyszukiwanie, a nie brak wyszukiwania :)

 

Może Ty wiesz co kolega ma w panelu, ja nie wiem więc aby wykluczyć wyłączenie wyszukiwania jako powód tego że nie wyszukuje spytałem o te ustawienia.

Link to comment
Share on other sites

  • 0
23 minuty temu, Piotr K. napisał:

W ramach tego błędu jedyne co zostało zrobione to zmiana indeksów w 1 tabeli.

 

A co to interesuje zwykłego użytkownika aplikacji? On ma od tego "1-click upgrade", a nie żeby grzebać i szukać po githubach co i gdzie zostało zmienione.

 

28 minut temu, Piotr K. napisał:

nie ma to żadnego wpływu na wyszukiwanie poza prędkością

 

Całkowity brak logiki w tym zdaniu. Skoro nie ma ŻADNEGO wpływu, to jak może mieć wpływ na prędkość?

 

Link to comment
Share on other sites

  • 0

No to tak:
1. zaktualizowałem PS
2. Poprawiłem linię 1471
Zaczął wyszukiwać np "migdał" ale za to robił błędy w innych rzeczach (nawet bez polskich znaków). Ponadto podgląd ajaxowy, był rozpieprzony i nie wyświetlał miniaturek.
3. Idąc tropem e_com'a, podmieniłem blocksearch z szablonu, na oryginalnego z bootstrapa
4. Pozmieniałem wagi, lecz odwrotnie. Ma wyszukiwać po nazwie, to zostawiłem tylko nazwę i indeks. Reszta na 0
5. Wyczyściłem tabele i zindeksowałem ponownie.

Efekt:
- wyszukuje produkty z 'ł'
- w podglądzie już ładnie pokazuje treść kategoria->nazwa
- miniaturek nadal brak
- mimo ustawień ' Szukaj używając części słowa ' i ' Wyszukaj dopasowując zakończenia słowa' na 'tak' w większości wyszukuje tylko po dokładnym podaniu całego wyrazu, np 'migdał'- wyszuka migdał, ale już nie 'migdały' czy 'migdałowe'. W większości bo nie zawsze. np po wpisaniu 'sza' wyszukuje 'kasza' ale już nie 'szampon' :)
 

Już nie mam pomysłów co jeszcze można zrobić.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...