Solr filtry: KeepWordFilter

Tym razem postanowiłem się przyjrzeć nietypowym filtrom dostępnym w standardowej dystrybucji Solr. Jako pierwszy w moje ręce trafił filtr o nazwie KeepWordFilter.

Zaczynamy

Na początek kilka słów o tym, co ten filtr robi. Jak sama nazwa może wskazywać „zatrzymuje” on słowa. Dokładniej rzecz biorąc filtr działa odwrotnie do filtra o nazwie StopFilter. Odwrotnie – czyli jak ? Czy po prostu zatrzymuje tylko określone w definicji słowa ? O tym za chwilę – zacznijmy od definicji typu i pola w pliku schema.xml:

<fieldtype name="keepwords" class="solr.TextField">
   <analyzer>
      <tokenizer class="solr.WhitespaceTokenizerFactory"/>
      <filter class="solr.KeepWordFilterFactory" words="words.txt" ignoreCase="true"/>
   </analyzer>
</fieldtype>

Jak widać na powyższej definicji typu filtr oprócz standardowej definicji klasy posiada również dwa dodatkowe atrybuty:

  • words – listę słów do zatrzymania
  • ignoreCase – wartość true | false włączająca lub wyłączająca ignorowanie wielkości znaków.

Zawartość pliku

Załóżmy, iż plik words.txt miałby następującą zawartość:

ala
ma
kota

Jeżeli chcielibyśmy zaindeksować frazę „Ala ma kota, a kot ma Alę”, to w indeksie zostałyby zapisane następujące tokeny: „ala”, „ma”, „kota”, „ma”, ponieważ tylko te wyrazy zostały zdefiniowane w pliku words.txt. Widać to wyraźnie w panelu administracyjnym Solr:

Kilka słów na koniec

Pomimo tego, iż nigdy nie korzystałem z tego filtra wydaje mi się, że jest to dobry filtr do przechowywania w polu wartości z typów wyliczeniowych, czy w sytuacjach, gdzie interesuje nas skończona, a nawet lepiej – niewielka i znana z góry lista wartości, takich jak np. kategorie, gdzie nie możemy filtrować informacji na poziomie aplikacji lub gdy jest to bardzo utrudnione. Cóż, mam nadzieję, że opisana funkcjonalność kiedyś się przyda.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *