Do czego może przydać się tie w Dismax’ie ?

Dismax parser obecny jest w Solr od niepamiętnych czasów. W większości wypadków jednak korzystamy z parameterów takich, jak qf, pf, czy mm zapominając zupełnie o bardzo przydatnym parametrze pozwalającym kontrolować wpływ mniej ważnych pól na score dokumentu, czyli o parametrze tie.

Tie, czyli co ?

Parametr tie pozwala kontrolować, jak mocny wpływ na score mają pola, które otrzymały score mniejszy od najwyższego. W przypadku ustawienia parametru tie na wartość 0.0, podczas liczenia score będą brane pod uwagę tylko i wyłącznie te pola, które otrzymały najwyższy score. W przypadku ustawienia tego parametru na wartość 0.99, pola, które mają score mniejszy od najwyższego będą traktowane prawie identycznie, jak pole o najwyższym wyliczonym score. Sprawdźmy zatem, czy jest to prawda.

Struktura danych i ich przykład

Do testów wybrałem sobie bardzo prostą strukturę indeksu, która teoretycznie mogłaby przedstawiać produkty w sklepie internetowym, oczywiście w ogromnym uproszczeniu:

Typ text_ws został zdefiniowany w następujący sposób:

Natomiast przykładowe dane wyglądają w następujący sposób:

Rezultat z tie == 0.01

Zacznijmy więc testy. Na pierwszy ogień idzie następujące zapytanie:

Powyższe skutkuje następującymi wynikami zwróconymi przez Solr (wizualizacja – http://explain.solr.pl/explains/cf0wnkpj):

Pierwszy dokument

Drugi dokument

Czyli jak to wygląda ?

Jak widać w przypadku przekazania wartości 0.01 do parametru tie pola, które mają najwyższy score, mają największe znaczenie, z niedużym znaczeniem innych pól. Widać to dobrze na przykładzie słowa book w pierwszym dokumencie na liście wyników. Score dla tego słowa, to 0.07163518, na który został wyliczony jako suma pola, które ma najwyższy score dla tego słowa, czyli pola title oraz wartości score reszty pól pomnożonych przez wartość tie, czyli 0.01.

Rezultat z tie == 0.99

Drugie zapytanie wygląda w następujący sposób:

Wyniki zwrócone przez Solr (wizualizacja – http://explain.solr.pl/explains/1w7b06lv):

Pierwszy dokument

Drugi dokument

Czyli jak to wygląda ?

Jak widać, score poszczególnych dokumentów uległ zmianie. Spójrzmy na ten sam dokument i te same słowo book. W przypadku, kiedy przekazaliśmy wartość 0.99 jako wartość parametru tie, wartość score zwiększyła się w stosunku do tej, którą obserwowaliśmy w przypadku tie równego 0.01. Oczywiście na zmianę wartości score ma także wpływ współczynnik normalizacji, ale pomińmy go w celu uproszczenia 🙂 Zatem w drugim przypadku obserwujemy score wynoszący 0.071668215, składa się na to wartość score dla pola title oraz suma wartości score dla każdego z pozostałych pól, ale tym razem pomnożonych przez wartość 0.99.

Podsumowując

Jak widać, parametr tie pozwala nam na dość dużą kontrolę tego, jak wyliczany jest score w przypadku DisjunctionMaxQuery. W ekstremalnym przypadku, kiedy chcielibyśmy, aby tylko pola, które mają najwyższy score miały znaczenie, możemy ustawić parametr tie na wartość 0.0. Tie pozwala nam na kontrolę tego, czy chcemy, aby mało znaczące pola, po których wyszukujemy, wpływały na wartość score dokumentów, a tym samym na ich pozycję na liście wyników wyszukiwania kiedy korzystamy z Dismax’a.

Na koniec

Jeżeli zastanawiasz się z pomocą czego wygenerowaliśmy wykresy, które widoczne są w treści, zapraszamy na http://explain.solr.pl/help, może http://explain.solr.pl/ będzie przydatne w Twoim przypadku.

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.