Krótkie spojrzenie: frange

W Solr 1.4 pojawił się nowy typ zapytań funkcyjnych zwanych frange. Służą one do wyszukiwania informacji z danego przedziału. Według twórców Solr zapytania te powinny być znacznie szybsze (w niektórych przypadkach testy wykazały nawet 40-krotny wzrost wydajności) od zwykłych zapytań. Stwierdziłem, że przeprowadzę prosty test sprawdzający, czy można spodziewać się takich wzrostów wydajności w przypadku zapytań o przedziały.

Zadawanie zapytań

Aby skorzystać z zapytań frange należy zmodyfikować składnię zapytania. Do tej pory, zapytanie o zakres danych mogło wyglądać w następujący sposób:

fq=test_si:[0+TO+10000]

w tym momencie, należy zadać to zapytanie w poniższy sposób:

fq={!frange l=0 u=10000}test_si

Oczywiście, możliwe jest również składanie zapytań o zakresy inne, niż liczbowe, na przykład:

fq={!frange l=adam u=mariusz}imie

Wydajność

Sama logika testu jest dość prosta. Struktura indeksu zawiera dwa pola: id, czyli unikalny identyfikator oraz pole namestr (typu String) w którym generuje wartości o które będę się pytał. Zaindeksowałem w ten sposób 100.000 dokumentów. Dodatkowo w każdym z dokumentów termy w polach są unikalne, tak, aby w łatwy sposób móc określić procent termów pokrytych przez dane zapytanie. Następnie zacząłem zadawać zapytania pokrywające pewien procent termów w indeksie. Każde zapytanie zadawałem kilkukrotnie uśredniając wyniki. Poniższa tabela ilustruje wynik testu:

Procent pokrytych termówSzybsza implementacjaCzas wykonania zapytania typu rangeCzas wykonania zapytania typu frange
100%frangeśrednio 240msśrednio 15ms
50%frangeśrednio 105msśrednio 12ms
10%frangeśrednio 50msśrednio 8ms
5%frangeśrednio 12msśrednio 12ms
1%rangeśrednio 10msśrednio 12ms

Jak widać standardowe zapytanie o przedział danych jest szybsze tylko w przypadku zapytania, które pokrywa małą ilość termów w polu. Już od 5% termów nowy typ zapytań o przedział jest dużo szybszy, co widać w przypadku większego pokrycia, np. 50%. Co ciekawe uzyskujemy wzrost wydajności kilkukrotny, co napawa optymizmem na jeszcze szybsze wyszukiwanie.

Na koniec

Wyniki mojego testu różnią się pod względem wydajności z tym co napisał Yonik Seeley na swoim blogu (wiąże się to m.in. z tym, że dane były przygotowane szybko), jednak co by nie mówić, testy pokazują wzrost wydajności w przypadku zapytań wykorzystujących frange.

This post is also available in: angielski

This entry was posted on poniedziałek, Maj 30th, 2011 at 07:20 and is filed under Solr. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

One Response to “Krótkie spojrzenie: frange”

  1. Solr i dostępne query parsery | Solr Enterprise Search Says:

    […] zadanie zapytanie o zakres wartości wyniku działania funkcji (pisaliśmy o tym – http://solr.pl/2011/05/30/krotkie-spojrzenie-frange/). Parser umożliwia wykorzystanie czterech parametrów: l, u, incl, incu które pozwalają na […]