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.

questionAnswers(2)

yourAnswerToTheQuestion