Zapytania wildcard i jak wygląda ich obsługa w Solr

Jeden z naszych czytelników zgłosił bardzo ciekawy problem, który można streścić do następującego pytania – „Dlaczego nie działają mi polskie litery z zapytaniach z wykorzystaniem wildcardów ?„. Ten wpis postara się odpowiedzieć na to pytanie.

Definicja typu i pola

Nasz czytelnik posiada następujący typ danych opisanych w pliku schema.xml:

Do tego pole, które jest obsługiwane przez ten typ wygląda następująco:

Dane

Do testów opisywanego problemu wykorzystywałem następujące dane:

Definicja problemu

Problem został zdefiniowany następująco: „w polu word mam polskie znaki, ale gdy zrobię zapytanie z polskim znakiem, np. „word:*ą*” to nic mi nie znajdzie„.

O czym warto pamiętać korzystając z ReversedWildcardFilterFactory

Podczas korzystania z ReversedWildcardFilterFactory należy pamiętać, aby filter ten zdefiniować tylko dla analizy podczas indeksowania, a nie definiować go dla analizy zapytań. Zatem poprawiona definicja typu powinna wyglądać następująco:

Czy teraz już działa ?

Zadając następujące zapytanie:

dalej nie otrzymujemy żadnych wyników. Dlaczego ?

Solr i obsługa wildcardów

Odpowiedź na pytanie postawione powyżej, jest dość prosta – Solr nie analizuje zapytań w których występują wildcardy. Tak, oznacza to, że podczas indeksacji filtr ASCIIFoldingFilterFactory usuwa nam polskie znaki zamieniając je na ich odpowiedniki z tablic 127 znaków ASCII, jednak w trakcie zadawania zapytania to się nie dzieje, pomimo tego, że filtry są zdefiniowane prawidłowo. I dlatego nie dostajemy żadnych wyników wyszukiwania. Jednak w takim wypadku, powinniśmy dostać wyniki zapytania na następujące zapytanie:

I tak się dokładnie dzieje, na powyższe zapytanie dostajemy wyniki wyszukiwania, jakich oczekiwaliśmy.

Możliwe rozwiązania

Jeżeli ktoś zapytał by mnie jakie rozwiązanie bym zasugerował, odpowiedziałbym, że w tym momencie po stronie aplikacji usuwałbym polskie znaki z zapytań które mają w sobie wildcardy. Od wersji 1.5 Solr, ReversedWildcardFilterFactory będzie poprawnie obsługiwać znaki spoza podstawowej tablicy ASCII, tak więc nie będzie konieczności korzystania z ASCIIFoldingFilterFactory, a co za tym idzie, problem nie będzie występował

2 thoughts on “Zapytania wildcard i jak wygląda ich obsługa w Solr

  • 25 stycznia 2011 at 13:21
    Permalink

    a tak mnie ostatnio zaciekawiło… co z Rosją, Grecją, Chinami? używanie solr’a jest tam możliwe? (pytanie niby głupie, ale skoro są polskie znaki jako „specjalne” to tam chyba całe alfabety? (może z Chinami przesadziłem:P))

    Reply
  • 27 stycznia 2011 at 16:35
    Permalink

    Daje radę. Co prawda jakość wsparcia dla różnych języków jest różna, ale działa. Łącznie z Chinami. Robiłem kiedyś chińską wyszukiwarkę i Chińczycy twierdzili że działa. Nie wiem jak z jakością, sam nie potrafiłem tego określić:)

    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.