Nous avons une base de données de films et de séries, et comme les données proviennent de nombreuses sources de fiabilité variable, nous aimerions être en mesure de faire correspondre les chaînes floues sur les titres des épisodes. Nous utilisons Solr pour la recherche dans notre application, mais les mécanismes de correspondance par défaut fonctionnent sur les niveaux de mots, ce qui n'est pas assez bon pour les chaînes courtes, comme les titresComment utiliser n-grammes correspondant approximatif avec Solr?
J'ai utilisé des correspondances approximatives n-grammes dans le passé, et j'étais très heureux de constater que Lucene (et Solr) supporte quelque chose hors de la boîte. Malheureusement, je n'ai pas pu le configurer correctement.
Je suppose que je besoin d'un type de champ spécial pour cela, donc j'ai ajouté le suivant type de champ à mon 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>
et changé le champ approprié dans le schéma à:
<field name="title" type="trigrams"
indexed="true" stored="true" multiValued="false" />
Cependant, cela ne fonctionne pas comme prévu. L'analyse de la requête semble correctement, mais je n'obtiens aucun résultat, ce qui me fait croire que quelque chose se passe au moment de l'index (ie le titre est indexé comme un champ par défaut au lieu du champ trigramme).
La requête que je suis en train est quelque chose comme
title:"guy walks into a psychiatrist office"
(avec une faute de frappe ou deux) et il doit correspondre à « Guy Walks dans un Psychiatre Office ».
(je ne suis pas vraiment sûr si la requête est correcte.)
De plus, je voudrais pouvoir faire quelque chose de plus en fait. Je voudrais en dessous de la chaîne, supprimer tous les signes de ponctuation et les espaces, supprimer mots d'arrêt anglais et puis changer la chaîne en trigrammes. Cependant, les filtres sont appliqués seulement après que la chaîne a été tokenized ...
Merci d'avance pour vos réponses.
Pouvez-vous poster la requête que vous utilisez? – olle
J'ai modifié la question pour inclure un exemple de requête. –