Question

Je dispose d'un problème qui interrogea Solr en utilisant le type de champ suivant:

<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 constater, il applique le "SnowballPorterterfilterFactory" lors de l'indexation et de l'interrogation. Si j'expose quelque chose comme

Stuff souris et amusement

Il est indexé comme:

panne d'index dans SOLR

Comme vous pouvez le voir, le mot "souris" est transformé en "Mous" par "SnowballPorterfilterFactory". Qui est ce que nous voulons. Cependant, lorsque nous recherchons

souris *

Il ne semble pas appliquer la "boule de neigefilterfactory" de la même manière. Je suppose que c'est à la fin.

panne de requête en Solr

Ma question est .. Y a-t-il un moyen de faire le "SnowballPorterfilterFactory" savoir sur des caractères génériques? De sorte que lorsque j'intervoque pour

souris *

Je n'ai pas 0 résultats.

intéressant si j'exise pour

mous *

L'enregistrement revient.

ou quelqu'un peut-il offrir un meilleur moyen d'interroger / indexer ce type de champ?

merci Dave

Était-ce utile?

La solution

du FAQ :

Contrairement à d'autres types de requêtes Lucene, de plantes génériques, de préfixes et de requêtes floues ne sont pas passées à travers l'analyseur, qui est le composant qui effectue des opérations telles que stemming et la masse inférieure. La raison de sauter l'analyseur est que si vous recherchiez des "chiens *", vous ne voudriez pas "chiens" d'abord tiré de "chien", car cela correspondrait alors "chien *", qui n'est pas la requête prévue. De toute façon, ces requêtes sont négligentes parce que QueryParser les rend minuscules. Ce comportement peut être modifié à l'aide de la méthode SetlowerCaseexPandedTerms (Boolean)

Si vous allez bien avec la modification de votre source de solr, SOLR-757 a un patch attaché à celui que vous pourriez trouver utile. Je ne connais pas d'un moyen de changer cela autre que de plonger dans la source cependant.

Qu'est-ce qui pourrait être une idée plus simple: il suffit d'avoir un champ de copie qui n'est pas tiré. L'utilisateur peut rechercher à la fois ces champs, puis la souris * correspondra dans le champ non tiint.

(éditer: En réalité, je regarde ce patch, je ne suis pas sûr qu'il fera ce que vous voulez. Mais fondamentalement, il vous suffit de changer votre gestionnaire de requête à la tige en premier.)

Autres conseils

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, depuis que vous utilisez une infiltration minusculaireFilterFactory, vos termes sont indexés en minuscules et la recherche de MOUS * ne reviendra rien.

Je pense que la seule chose à faire lorsque vous utilisez des caractères génériques consiste à vous assurer d'adapter votre requête à la manière dont vos termes sont indexés (d'une manière similaire à ce que votre analyseur de requête ferait).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top