Losowe dokumenty z wyniku wyszukiwania (i rozwiązanie konkursu!)

A teraz dwie sroki za ogon – nowy artykuł i rozdanie w naszym małym konkursie, gdzie można było wygrać elektroniczną wersję książki Apache Solr 4 Cookbook. W artykule chcielibyśmy pokazać, jak zaimplementować losową kolejność dokumentów w wynikach zapytania zwracanego przez Apache Solr. Nasz przykład jest rozwiązaniem rzeczywistego problemu – właśnie dzięki niemu wylosujemy dwóch zwycięzców naszego konkursu. Autorzy komentarzy, którzy znajdą się na początku wyników wyszukiwania otrzymają naszą nagrodę.

Dokumenty

Nasze dokumenty zawierają informację o uczestnikach konkursu – ich id, imię/nick (jako pole author) oraz pole email. Dla przykładu jeden rekord może wyglądać w następujący sposób:

Nasze bardzo „big data” zawiera 19 rekordów, może powinniśmy użyć map/reduce? :).

Schema

Plik schema.xml opisujący strukturę indeksu jest również bardzo prosty. W naszym przypadku zawiera następujące pola:

Dodatkowa konfiguracja

Powinniśmy upewnić się się, że plik schema.xml zawiera następujące definicje typu i pola:

W przykładowym pliku schema.xml dostarczanym przez Solr ten typ i definicja pola są dostępne domyślnie. Będziemy potrzebować tych definicji do generowania losowej kolejności wyników.

Wykonywanie zapytań z losowym porządkiem sortowania

Tworzenie zapytań z losowym porządkiem wyników jest trochę nietypowe. Budujemy zapytanie jak zwykle z wyjątkiem definicji sortowania wyników. Parametr sort używa zdefiniowanego wcześniej dynamicznego pola z prefiksem random. Na przykład:

Jak to działa?

Solr wylicza kolejność dokumentów bazując na nazwie pola dynamicznego oraz na numerze wersji indeksu. Oznacza to, że za każdym razem, gdy używamy tego samego pola na tym samym indeksie (jeżeli indeks nie zmienił się pomiędzy zapytaniami), otrzymamy te same rezultaty. To wada tej metody, chociaż może okazać się przydatna w pewnych okolicznościach. Na przykład stronicowanie – nie chcemy dostać zdublowanych wyników na różnych stronach, prawda? Z powodu powyższego za każdym razem powinniśmy generować nową nazwę pola przesyłając do Solr zapytanie z naszej aplikacji.

A taraz – wyniki konkursu!

W losowaniu użyliśmy podanego poniżej zapytania. Liczba użyta w nazwie pola dynamicznego jest absolutnie losowa i została wygenerowana poprzez zadanie następującego pytania: „Tato, możesz mi podać kilka dowolnych liczb?” :). Tak więc nasze zapytanie uzyskało formę:

Co dało następujące wyniki:

Zwycięzcy

  • Rajeev
  • Evgeny

Gratulujemy! Skontaktujemy się z Wami w najbliższym czasie z dalszymi informacjami, w jaki sposób możecie otrzymać nagrodę. Jeszcze raz: gratulacje! Do wszystkich uczestników: Dziękujemy za udział i za Wasze komentarze.

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.