Jak korzystać z n-gramów zbliżonych do pasujących do Solr?
Mamy bazę filmów i seriali, a ponieważ dane pochodzą z wielu źródeł o różnej niezawodności, chcielibyśmy być w stanie dopasować ciąg znaków do tytułów odcinków. Używamy Solr do wyszukiwania w naszej aplikacji, ale domyślne mechanizmy dopasowania działają na poziomach słów, co nie jest wystarczające dla krótkich łańcuchów, takich jak tytuły
W przeszłości korzystałem z przybliżonego dopasowania n-gramów i bardzo się ucieszyłem, że Lucene (i Solr) obsługuje coś takiego po wyjęciu z pudełka. Niestety, nie byłem w stanie poprawnie go skonfigurować.
Zakładałem, że potrzebuję do tego specjalnego typu pola, więc dodałem następujący typ pola do mojego pliku schema.xml:
<fieldType
name="trigrams"
stored="true"
class="solr.StrField">
<analyzer type="index">
<tokenizer
class="solr.analysis.NGramTokenizerFactory"
minGramSize="3"
maxGramSize="5"
/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
i zmieniłem odpowiednie pole w schemacie na:
<field name="title" type="trigrams"
indexed="true" stored="true" multiValued="false" />
Jednak to nie działa tak, jak oczekiwałem. Analiza zapytań wygląda poprawnie, ale nie otrzymuję żadnych wyników, co sprawia, że wierzę, że coś się dzieje w czasie indeksowania (tzn. Tytuł jest indeksowany jak domyślne pole ciągu zamiast pola trygramu).
Zapytanie, które próbuję, jest podobne
title:"guy walks into a psychiatrist office"
(z literówką lub dwoma) i powinien pasować do „Guy Walks into a Psychiatrist Office”.
(Nie jestem pewien, czy zapytanie jest poprawne).
Ponadto chciałbym być w stanie zrobić coś więcej. Chciałbym obniżyć łańcuch, usunąć wszystkie znaki interpunkcyjne i spacje, usunąć angielskie stopery i THEN zmienić ciąg na trygram. Jednak filtry są stosowane dopiero po tokenowaniu łańcucha ...
Dzięki z góry za odpowiedzi.