2017-07-20 1 views
0

Je travaille avec la recherche de nom et, pour une raison quelconque, quand je fais une recherche « sam » documents contenant la requête en tant que sous-chaîne comme « samara », « samir » ou « samuel » sont retournés avec un poids apparemment égal.Comment peser fortement le texte de requête exact dans solr plutôt que les résultats le contenant comme sous-chaîne?

Est-ce juste une fonction intégrée de Solr pour analyser des mots contenant votre terme de recherche en tant que sous-chaîne? Existe-t-il un moyen d'appliquer plus de poids à la requête exacte elle-même avant de passer à des alternatives?

J'ai déjà deux fieldTypes distincts pour pondérer le texte original plus fortement que ses synonymes, mais je n'ai pas pu trouver de solution à ce problème de sous-chaîne car il semble inhérent à Solr.

Voici ma définition de fieldType:

<fieldType class="solr.TextField" name="fullTextName" positionIncrementGap="100"> 
    <analyzer type="index"> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 

     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 

    </analyzer> 
</fieldType> 

Toute aide serait vraiment apprécié.

Répondre

1

Il est possible Solr:

1) vous définissez 2 types de champs: fullTextName et fullTextNameExact la différence entre eux sera l'analyse des temps d'indexation, plus précisément vous voulez que le type exact du champ pour ne pas avoir le bord Ngram filtre de jeton.

2) 2 Pour créer les champs, un pour chaque type

3) on définit un gestionnaire de requête qui utilise l'analyseur de requête dismax ou edismax analyseur syntaxique de la requête. [1] 4) un paramètre de requête à utiliser est le "qf", ce param permet d'exprimer différents champs à impliquer dans la recherche, en les pondérant avec des boosts différents. Dans votre cas, vous pouvez utiliser:

<str name="qf">fullTextNameExact^3 fullTextName</str> 

Cela stimulera l'amélioration des résultats de match précis, mais encore permettre autocomplétion.

[1] https://cwiki.apache.org/confluence/display/solr/The+Extended+DisMax+Query+Parser

+0

Je suis confus though-- je l'ai fait ce que vous avez proposé ces deux champs distincts, mais même quand dans le champ 'exactName' je précise que pour « champ de requête »(celui avec non 'EdgeNgramFilter') Je frappe toujours les documents qui ont des correspondances de sous-chaînes. Comme q = sam, et un résultat peut être samir. Pourrais-je manquer quelque chose d'autre? Merci! – Sam

+0

Pouvez-vous poster ici la définition fieldType pour le type de champ que vous avez utilisé pour exactName? Comme je l'ai mentionné, ce type de champ ne devrait pas avoir de filtrage de jeton Ngram de bord. –

+0

Je l'ai inclus dans le post – Sam