Autocomplete na polach wielowartościowych (faceting)

W poprzednim artykule opisującym możliwe podejście do funkcjonalności autocomplete na polach wielowartościowych skorzystaliśmy z highlightingu, aby wydobyć te informacje, które nas interesowały. Obiecaliśmy także, że wrócimy do tematu i pokażemy, jak osiągnąć podobny efekt z wykorzystaniem facetingu. Zatem, spójrzmy jak wygląda realizacja takiej funkcjonalności.

Kilka słów na początek

Ze względu na to, że jest to niejako kontynuacja poprzedniego wpisu, sugerujemy, aby przeczytać wpis „Autocomplete na polach wielowartościowych (highlighting)„, aby wszystkie elementy wpisu były jasne. Warto także wspomnieć, iż metoda ta była już pokazywana we wpisie „Solr i autocomplete (cz. 1)„, aczkolwiek chcieliśmy przypomnieć ten temat ze względu na częstotliwość pojawiających się pytań.

Konfiguracja

Podobnie, jak w poprzednim wpisie zacznijmy od konfiguracji.

Struktura indeksu

Struktura naszego indeksu nie różni się od tego co zaprezentowane było w poprzednim wpisie. Jednak, przypomnijmy te informacje – zakładamy, że chcemy podpowiadać frazy z indeksu z pola wielowartościowego. Pole to nazywa się features, a cała konfiguracja pól w indeksie będzie następująca:

Do autocomplete będziemy wykorzystywać pole features_autocomplete.

Kopiowanie

Dodatkowo, aby automatycznie zasilać danymi pole features_autocomplete skorzystamy z funkcjonalności copy field, a zatem do pliku schema.xml dodajemy następujący wpis:

Typ text_autocomplete

Typ text_autocomplete różni się od tego, co widzieliśmy w poprzednim wpisie. Tym razem wygląda on następująco:

Ze względu na to, że będziemy korzystać z facetingu korzystamy z solr.KeywordTokenizerFactory oraz sprawiamy, aby wszystkie znaki były małe za pomocą solr.LowerCaseFilterFactory.

Przykładowe dane

Nasze dane są identyczne do tych, które wykorzystaliśmy w poprzednim wpisie i wyglądają następująco:

Zapytanie z facetingiem

Zobaczmy zatem, jak wyglądać będzie nasze zapytanie, kiedy wykorzystamy faceting.

Pełne zapytanie

W przypadku facetingu nasze zapytanie powinno wyglądać następująco:

Kilka słów o dodanych parametrach:

  • rows=0 – informujemy Solr, że nie jesteśmy zainteresowani wynikami wyszukiwania,
  • facet=true – informujemy Solr, iż chcemy korzystać z facetingu,
  • facet.field=features_autocomplete – określamy jakie pole ma zostać wykorzystane do facetingu,
  • facet.prefix=sing – za pomocą tego parametru przekazujemy interesującą nas frazę.

Wyniki

Wyniki, które Solr zwraca na powyższe zapytanie, wyglądają następująco:

Jak widać, w sekcji odpowiedzialnej za faceting, otrzymaliśmy te frazy, które nas interesowały wraz z ilością dokumentów w jakich się znajdują.

O czym pamiętać

Ważną rzeczą jest to, że wartości parametru facet.prefix nie są analizowane, zatem jeżeli zamiast frazy sing przekazalibyśmy frazę Sing Solr nie zwróciłby interesujących nas wyników. Należy o tym pamiętać.

Podsumowanie

Powyższy wpis pokazał drugi sposób podejścia do realizacji funkcjonalności autocomplete na polach wielowartościowych. Oczywiście nie wyczerpaliśmy tematu i kiedyś do niego wrócimy, ale na dzisiaj to wszystko. Mamy nadzieję, że komuś się przyda to co znalazł w tych artykułach 🙂

2 thoughts on “Autocomplete na polach wielowartościowych (faceting)

  • 14 maja 2015 at 21:53
    Permalink

    Witam, probuje ten przyklad uruchomic w Solr 5.1 ale nie wychodzi, poniewaz Solr tak jak by ignorowal schema.xml ktora umiescilem w /conf. To sa moje pierwsze kroki z Solr, wiec moze w tym tkwi problem 🙂

    Reply
    • 24 maja 2015 at 18:13
      Permalink

      Jaką masz dokładnie ścieżkę do plików konfiguracyjnych?

      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.