2014-05-06 3 views
0

J'indexé dans les noms de magasin Solr commeSolr requête de recherche ne considère pas un caractère spécial

H&M 
Lotte & Anna 
fan & more 
Tele2 
Pure Tea 

je les deux questions suivantes (avec importance en priorité)

  1. si je recherche " H & M "Je n'obtiendrai jamais de résultat. Si je cherche "te & Ann" j'obtiens les résultats attendus.

  2. si je recherche « te & un » les résultats que je reçois sont Télé2 et thé pur alors que je me serais attendu à « Lotte & Anna » apparaît d'abord dans la liste.

Il semble que le caractère & ne soit pas pris en compte. Qu'est-ce que je fais mal ici?

Ce sont mes analyseurs pour le domaine spécifique (à la fois la requête et l'index)

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StandardFilterFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/> 
    </analyzer> 
    <analyzer type="query"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StandardFilterFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

Ok, donc le 1er problème a été résolu avec le WordDelimiterFilterFactory spécifiant & => ALPHA dans le wdfftypes.txt et le changement de commutation du StandardTokenizerFactory au WhitepsaceTokenizerFactory

<tokenizer class="solr.WhitespaceTokenizerFactory"/> 
<filter class="solr.WordDelimiterFilterFactory" types="wdfftypes.txt"/> 

(édité à la fois dans l'analyseur et dans la requête).

La deuxième question demeure. Dans le debugQuery je reçois le

"debug": { 
    "rawquerystring": "te & an", 
    "querystring": "te & an", 
    "parsedquery": "text:te text:an", 
    "parsedquery_toString": "text:te text:an", 
    "explain": { 
     "": "\n0.8152958 = (MATCH) product of:\n 1.6305916 = (MATCH) sum of:\n 1.6305916 = (MATCH) weight(text:te in 498) [DefaultSimilarity], result of:\n  1.6305916 = score(doc=498,freq=1.0 = termFreq=1.0\n), product of:\n  0.8202942 = queryWeight, product of:\n   5.300835 = idf(docFreq=87, maxDocs=6491)\n   0.15474811 = queryNorm\n  1.9878132 = fieldWeight in 498, product of:\n   1.0 = tf(freq=1.0), with freq of:\n   1.0 = termFreq=1.0\n   5.300835 = idf(docFreq=87, maxDocs=6491)\n   0.375 = fieldNorm(doc=498)\n 0.5 = coord(1/2)\n" 
    }, 

suivant ainsi, que dois-je modifier pour que les poids se déplacent en faveur du résultat désiré?

Répondre

2

Utilisez "NGramFilterFactory" au lieu de "EdgeNGramFilterFactory". De cette façon, "Lotte & Anne", est indexée dans "lo, ot, tt, te, lot, ott, tte, lott, otte, lotte" et "an, nn, ne, ann, nne, anne". Ainsi, lorsque vous recherchez "tte & ann", le document correspondra.

Questions connexes