2017-04-06 4 views
0

Bonsoir,Apache Solr rechercher automatiquement avec (*)

Lorsque je recherche le mot "app", il ne montre pas le mot "apple". Mais si je cherche "app *", il montre "apple" et "app". Je ne veux pas écrire "*" dans la barre de recherche. Comment puis-je faire cela si je ne recherche que "app" et il montre "apple" et "app"?

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100" multiValued="true"> 
<analyzer type="index"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 
<analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/> 
    <filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 

J'ai essayé d'ajouter <filter class="solr.ReversedWildcardFilterFactory"/> mais cela n'a pas fonctionné.

Quelqu'un peut-il m'aider?

J'utilise Apache Solr 6.4.1

Sry pour mon mauvais anglais.

Répondre

0

utilisation EdgeNGramFilterFactory

EdgeNGramFilterFactory:

Ce filtre génère des jetons bord n-gramme de tailles dans l'intervalle donné.

Arguments:

  • minGramSize: (nombre entier, par défaut 1) La taille minimale de gramme.
  • maxGramSize: (entier, valeur par défaut 1) La taille maximale du gramme.

Exemple:

Si nous utilisons minGramSize = 1 et maxGramSize = 4 puis

Dans: "quatre-vingts"
Tokenizer à filtre: "quatre", "score"
Out: "f", "fo", "fou", "quatre", "s", "sc", "sco", "scor"

Pour votre cas, vous pouvez utiliser le schéma ci-dessous:

<fieldType name="text_ngram" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/> 
     <filter class="solr.LowerCaseFilterFactory" /> 
     <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="200"/> 
    </analyzer> 
    <analyzer type="query"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" words="stopwords.txt" ignoreCase="true"/> 
     <filter class="solr.SynonymFilterFactory" expand="true" ignoreCase="true" synonyms="synonyms.txt"/> 
     <filter class="solr.LowerCaseFilterFactory" /> 
    </analyzer> 
</fieldType> 

Et mettez à jour votre fieldType à text_ngram

<field name="name" type="text_ngram" indexed="true" stored="false" multiValued="true"/> 

Note: Ne pas oublier de recharger le noyau et réindexer les données

+0

Merci, je ne savais pas que je REINDEX sur les données – Hamso