Mamy bazę danych filmów i seriali, a ponieważ dane pochodzą z wielu źródeł o różnej niezawodności, chcielibyśmy być w stanie wykonać rozmyte dopasowywanie ciągów na tytułach odcinków. Używamy Solr do wyszukiwania w naszej aplikacji, ale domyślne mechanizmy dopasowujące działają na poziomach słów, co nie jest wystarczające dla krótkich łańcuchów, takich jak tytuły:Jak używać przybliżonego dopasowania n-gramów z Solr?
Użyłem przybliżonego dopasowania n-gramów w przeszłości, a ja byłem bardzo się cieszę, gdy widzę, że Lucene (i Solr) wspierają to coś z pudełka. Niestety, nie udało mi się go poprawnie skonfigurować.
Przypuszczałem, że potrzebny jest specjalny typ pola dla tego, więc dodałem następujące pola typu do mojego 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ła odpowiednie pole w schemacie do:
<field name="title" type="trigrams"
indexed="true" stored="true" multiValued="false" />
Jednak to nie działa tak jak się spodziewałem. Analiza zapytań wygląda poprawnie, ale nie dostaję żadnych wyników, co powoduje, że wierzę, że coś dzieje się w czasie indeksowania (tj. Tytuł jest indeksowany jak domyślne pole ciągu zamiast pola trygram).
Zapytanie próbuję coś jak
title:"guy walks into a psychiatrist office"
(z typo lub dwa) i należy go dopasować "Guy Walks do psychiatry Office".
(nie jestem pewien, czy zapytanie jest poprawne.)
Ponadto chciałbym, aby móc zrobić coś więcej w rzeczywistości. Chciałbym obniżyć ciąg znaków, usunąć wszystkie znaki interpunkcyjne i spacje, usunąć angielskie stopwords, a następnie zmienić ciąg znaków na trygramy. Jednakże, filtry są stosowane tylko po tym, jak ciąg został zgeometryzowany ...
Z góry dziękuję za odpowiedzi.
można pisać zapytanie używasz? – olle
Edytowałem pytanie, aby dołączyć przykładowe zapytanie. –