Solr 7.6.0 – pola uninvertible

Wraz niedawną publikacją Solr 7.6.0 pojawiła się możliwość ustawienia pola, bądź typu jako uninvertible. Pozwala to na kontrolę tego, co zrobi Solr z polem w przypadku kiedy konieczne będzie odwrócenie odwróconego indeksu, czyli podczas korzystania z takich funkcjonalności, jak faceting, czy sortowanie. Przyjrzyjmy się co daje nam nowa właściwość pól w Solr 7.6.0.

Przykładowa struktura danych

Zacznijmy od prostej struktury danych, która wygląda następująco:

<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" docValues="true" />
<field name="title" type="text_general" indexed="true" stored="true" multiValued="false"/>
<field name="tags" type="string" indexed="true" stored="true" multiValued="true" />

Nic specjalnego, trzy pola w tym jeden identyfikator. Oczywiście, jeżeli zaindeksujemy przykładowe dane, mamy możliwość facetingu na każdym z wymienionych pól. W naszym przypadku zapytania takie jak poniższe powinny wykonywać się bez problemów, np:

http://localhost:8983/solr/test/select?q=*:*&facet=true&facet.field=title

Dodajemy właściwość uninvertible

Jeżeli zmodyfikujemy nasz przykład i dodamy właściwość uninvertible ustawioną na wartość true, która jest domyślną wartością tej właściwości, nic nie powinno się zmienić i nasze przykładowe zapytanie będzie dalej działać:

<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" docValues="true" />
<field name="title" type="text_general" indexed="true" stored="true" multiValued="false" uninvertible="true"/>
<field name="tags" type="string" indexed="true" stored="true" multiValued="true" />

Zachowanie pól z uninvertible=false

Zmodyfikujmy nasz przykład tak, aby pole title miało właściwość uninvertible ustawioną na wartość false:

<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" docValues="true" />
<field name="title" type="string" indexed="true" stored="true" multiValued="false" uninvertible="false"/>
<field name="tags" type="string" indexed="true" stored="true" multiValued="true" />

Jeżeli ponownie zadalibyśmy nasze zapytanie do Solr, zachowanie zmienia się. Zamiast wyników facetingu dostalibyśmy pustą tablicę. Dalczego? Ponieważ w przypadku ustawienia pola jako uninvertible=false Solr nie pozwoli na zbudowanie field cache, który to wykorzystywany jest w przypadku braku doc values. Oczywiście wiemy, że skorzystanie ze struktury doc values nie jest możliwe w przypadku pól analizowanych.

Wykorzystanie

Właściwość uninverible możemy wykorzystać wtedy, kiedy chcemy zabezpieczyć naszą instancję lub klaster przed intensywnym wykorzystaniem pamięci w związku z field cache. Przykładem może być właśnie wyłączenie funkcjonalności takich jak faceting, czy sortowanie na polach, które podlegają analizie, a tym samym mają potencjalnie dużo unikalnych wartości, co może powodować znaczne wykorzystanie pamięci.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *