2010-07-23 10 views
3

Je vais avoir un problème interrogation Solr en utilisant le type de champ suivant:SnowballPorterFilterFactory de Solr et Wildcard Paramètres des

<fieldType name="text_ci" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/> 
     <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/> 
    </analyzer> 
</fieldType> 

Comme vous pouvez le voir applique la « SnowballPorterFilterFactory » lors de l'indexation et l'interrogation. Si quelque chose que je Index comme

trucs souris et amusant

Il get répertorié:

Index Breakdown in Solr

Comme vous pouvez le voir le mot "souris" est transformé en "Mous" par le « SnowballPorterFilterFactory ». C'est ce que nous voulons. Cependant, lorsque nous cherchons

Souris *

Il ne semble pas appliquer le de la même manière « SnowballPorterFilterFactory ». Je suppose en raison de la * à la fin.

Query Breakdown in Solr

Ma question est .. Y at-il un moyen de faire le savoir "SnowballPorterFilterFactory" sur les caractères génériques? Alors que quand je requête pour

Souris *

Je ne reçois pas 0.

Fait intéressant si je requête pour

* protocoles d'entente

Le dossier ne reviennent.

Ou quelqu'un peut offrir une meilleure façon d'interroger/index ce type de champ?

Merci Dave

Répondre

2

De l'FAQ:

Contrairement à d'autres types de requêtes Lucene, Wildcard, préfixe, et les requêtes floues ne sont pas passés à travers l'analyseur, qui est le composant qui effectue les opérations telles que résultant et en minuscules. La raison de sauter l'analyseur est que si vous recherchez « chiens * » vous ne voulez pas « chiens » d'abord à coeur pour « chien », puisque ce serait alors correspondre « chien * », ce qui est pas la requête prévue. Ces requêtes sont insensibles à la casse de toute façon, car QueryParser les rend minuscules.Ce comportement peut être modifié en utilisant la méthode setLowercaseExpandedTerms (booléenne)

Si vous êtes bien avec le changement source Solr, SOLR-757 a un patch attaché à ce que vous pourriez trouver utile. Je ne connais pas de moyen de changer cela à part plonger dans la source.

Ce qui pourrait être une idée plus simple: il suffit d'avoir un champ de copie qui n'est pas borné. L'utilisateur peut effectuer une recherche dans ces deux champs, puis la souris * correspondra dans le champ non tronqué.

(EDIT:.. En fait, en regardant ce patch, je ne suis pas sûr qu'il va faire ce que vous voulez Mais fondamentalement vous avez juste besoin de changer votre gestionnaire de requête pour endiguer la première)

+0

Merci ... Cela répond à ma question sur pourquoi il n'applique pas les filtres. J'aime l'idée du champ de copie .. merci – CraftyFella

2

La dernière fois que je vérifie, lorsque vous utilisez des caractères génériques, l'analyseur de requête n'est pas utilisé. Donc, puisque vous utilisez un LowerCaseFilterFactory, vos termes sont indexés en minuscules et la recherche de Mous * ne retournera rien. Je pense que la seule chose à faire lorsque vous utilisez des caractères génériques est de vous assurer d'adapter votre requête à la façon dont vos termes sont indexés (d'une manière similaire à ce que ferait votre analyseur de requêtes).

+0

Dang .. vous avez raison à propos de la partie Mous * .. laissez-moi mettre à jour la question – CraftyFella

+0

Est-ce que le 2ème paragraphe est le seul moyen de gérer les caractères génériques dans solr? – CraftyFella