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.