Aplikacja „sprzedaż samochodów” – Unicode Collation, czyli sortowanie wyników wyszukiwania uwzględniając język danych (cz. 4)

W trzeciej części cyklu dodaliśmy dane lokalizacyjne oraz informacje o miejscowości, z którego pochodzi auto. Wkrótce potem dodaliśmy również możliwość sortowania po miejscowości, w prosty sposób modyfikując schemę:

Okazało się jednak, że sortowanie po miejscowości (pole city_sort) nie funkcjonuje tak jak powinno, a wszystko ze względu na występowanie w nazwach miast polskich znaków. Co z tym zrobić ?

Analiza wymagań

Sprawdźmy, czy faktycznie sortowanie po polu „city_sort” nie uwzględnia polskich znaków. Zadajmy zapytanie:

Otrzymujemy rezultat:

Rzeczywiście, wyniki nie są posortowane poprawnie. Oczekiwaliśmy takiego rezultatu:

W celu usprawnienia sortowania danych zawierających polskie znaki wykorzystamy filtr „solr.CollationKeyFilter”.

solr.CollationKeyFilter

Filtr solr.CollationKeyFilter jest wykorzystywany podczas indeksowania, dodając do indeksu specjalne „klucze sortujące”. Pozwala nam na wskazanie kolatora powiązanego z konkretnym krajem i językiem. Możemy również określić „siłę” kolatora, która definiuje pewien minimalny poziom różnic jaki jest brany pod uwagę przy porównywaniu. Przykład:

Powyższy przykład jest definicją fabryki dla filtra solr.CollationKeyFilter, określającego kolator dla języka hiszpańskiego z siłą primary.

Zmiany w schema.xml

  1. Definicja nowych typów pól:

      Jak widać jest to tak naprawdę definicja już istniejącego typu „lowercase” uzupełnionego o filtr solr.CollationKeyFilter, określającego kolator dla języka polskiego. Będziemy używać tego typu pola do definiowania pól, które zawierają dane z polskimi znakami.
  2. Zmiana definicji pola „city_sort”:
    • zmieniamy typ dla pola „city_sort” na nowo zdefiniowany typ „polishLowercase”:

Testy funkcjonalności

Zanim przetestujemy, czy zmiana typu pola przyniosła oczekiwany rezultat, pamiętajmy, że filtr solr.CollationKeyFilter wykorzystywany w tym typie działa na etapie indeksacji. Należy zatem wykonać pełną reindeksację danych.

Sprawdźmy teraz wynik zapytania, które wykorzystaliśmy wcześniej do przetestowania jakości sortowania:

Jak się okazuje, otrzymujemy oczekiwany wcześniej, poprawny rezultat:

Podsumowanie

Kolejny zgłoszony problem został pomyślnie rozwiązany. Usprawniliśmy jakość wyników sortowania po polskich znakach, wykorzystując nieskomplikowany, ale jakże pomocny filtr solr.CollationKeyFilter. Czekamy na dalsze zgłoszenia 🙂

4 thoughts on “Aplikacja „sprzedaż samochodów” – Unicode Collation, czyli sortowanie wyników wyszukiwania uwzględniając język danych (cz. 4)

  • 9 sierpnia 2011 at 12:52
    Permalink

    Czy chodzi Ci o język artykułu czy język powiązany z kolatorem? Artykuł jest również dostępny w języku angielskim.

    Reply
  • 16 kwietnia 2012 at 12:58
    Permalink

    Czy jest możliwe takie sortowanie w solr 1.4? W Api tej wersji nie ma niestety CollationKeyFilter.

    Reply
  • 16 kwietnia 2012 at 23:45
    Permalink

    Nie jestem pewien, dawno nie widziałem już Solr w wersji 1.4 🙂 Z tego co pamiętam, w czasach korzystania z Solr 1.3, bądź 1.4 musieliśmy modyfikować kod Solr, aby poprawnie sortowanie słowa w języku polskim.

    Reply

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

This site uses Akismet to reduce spam. Learn how your comment data is processed.