Solr 4.0: DocTransformers – pierwsze spojrzenie

Dzisiejszy wpis jest kolejnym z serii, w której staramy się przybliżyć funkcjonalności jakie pojawią się w wersji 4.0 Apache Solr. Dzisiaj przyjrzymy się funkcjonalności pozwalającej na zmianę sposobu w jaki zwracane są pola w dokumentach.

Po co mi taka funkcjonalność ?

Do tej pory, praktycznie, nie mieliśmy możliwości wpływania na to, jak budowane były odpowiedzi zwracane przez Solr. Wraz z pojawieniem się wersji 4.0 Solr dostaniemy do ręki nowe narzędzie, tzw. DocTransformers. Funkcjonalność ta pozwala na modyfikację pól w wynikach wyszukiwania zwróconych przez Solr. Patrząc na to, co w tym momencie jest dostępne, mamy na przykład możliwość zamiany nazw zwracanych pól, czy oznaczenia elementów dodawanych przez QueryElevationComponent. W tym momencie nie jest tego dużo, natomiast implementacja własnego DocTransformer’a nie jest trudna, o czym za chwilę.

Co jest już dostępne

W tym momencie, w wersji 4.0 Apache Solr dostępne są następujące funkcjonalności związane z DocTransformer’ami:

  • Możliwość oznaczenia, które dokumenty zostały dodane przez QueryElevationComponent.
  • Możliwość dodania informacji explain do dokumentu.
  • Możliwość dodania stałej wartości jako pola do dokumentu.
  • Możliwość dodania informacji o shardzie z jakiego pochodzi danych dokument.
  • Możliwość dodania informacji docid jako pola dokumentu (identyfikator wykorzystywany przez Lucene).

Jak z tego skorzystać ?

Sprawdźmy, jak wygląda wykorzystanie tej funkcjonalności. Do tego celu pobrałem najnowszą wersję Apache Solr z repozytorium i uruchomiłem przykładowe wdrożenie. Następnie zaindeksowałem przykładowe dane i zadałem następujące zapytanie:

W powyższym zapytaniu warto przyjrzeć się parametrowi fl. Oprócz informacji takich, jak pole name oraz wartość score powiedzieliśmy Solr, że chcemy, aby do wygenerowania wyników wyszukiwania zostały wykorzystane dwa DocTransformery: [docid] oraz [explain]. W odpowiedzi Solr wygenerował następującego XML’a:

Jak widać, Solr dołączył do wyników wyszukiwania to o co go prosiliśmy.

Własna implementacja

Omówmy, jak wygląda implementacja własnego DocTransfomer’a. Poniżej, przykład klasy RenameFieldsTransformer z pakietu org.apache.solr.response.transform. Ogólnie polega to na implementacji następujących metod z klasy DocTransformer z pakietu org.apache.solr.response.transform:

  • String getName() – metoda zwracająca nazwę transformera,
  • void transform(SolrDocument doc, int docid) – metoda dokonująca transformacji.

Sama implementacja wygląda następująco:

Powyższy kod umożliwia zwrócenie pola o innej nazwie, niż ta, która została zaindeksowana. Metoda transform iteruje po wszystkich wartościach zmiennej rename, która zawiera nazwę pól, które mają zostać zmienione wraz z nazwami na jakie powinny zostać zamienione. Należy pamiętać, iż, aby nasz własny transformer zaczął działać, należy dodać go do pliku solrconfig.xml. Oto przykład w wiki Solr:

Podsumowując

Należy pamiętać, iż opisywana funkcjonalność jest oznaczona jako eksperymentalna i jej działanie może się zmienić w stosunku do opisywanego w chwili publikacji wersji 4.0 Solr i Lucene. Na pewno wrócimy do tematu po ukazaniu się Solr 4.0.

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.