2011-10-08 15 views
7

Sto provando a cercare una parola parziale usando Solr, ma non riesco a farlo funzionare.Cerca parole parziali usando Solr

Sto usando questo nel mio file schema.xml.

<fieldType name="text" class="solr.TextField" omitNorms="false"> 
    <analyzer type="index"> 
     <tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="15" /> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StandardFilterFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.PorterStemFilterFactory"/> 
     <filter class="solr.WordDelimiterFilterFactory" stemEnglishPossessive="1" splitOnNumerics="1" splitOnCaseChange="1" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="1" preserveOriginal="1"/> 
    </analyzer> 
</fieldType> 

Ricerca di die h non funziona, ma die hard restituisce alcuni risultati. Ho reindicizzato il database dopo aver aggiunto la configurazione sopra.

Here è l'url e l'output durante la ricerca di die hard. Il debugger è attivo.

Here è l'url e l'output durante la ricerca di die h. Il debugger è attivo.

Sto usando Solr 3.3. Here è il resto del file schema.xml.

+0

Ho risolto questo. vai a: http://stackoverflow.com/questions/4824954/solr-partial-and-full-string-match/8247013#8247013 – wormhit

risposta

6

La query che hai condiviso è la ricerca nel campo "titolo_testo", ma lo schema che hai postato sopra definisce il campo "testo". Supponendo che si tratti solo di una svista, e il campo title_text è definito come nel tuo post, penso che un probabile problema è che NGramTokenizer è configurato con minGramSize = "3" e ci si aspetta che corrisponda usando un token a carattere singolo.

Si potrebbe provare a cambiare minGramSize a 1, ma questo porterà inevitabilmente ad alcuni indici molto inefficienti; e mi chiedo se sei davvero desideroso di avere "e" abbinare ogni film con una e nel titolo?

+0

E 'possibile definire un 'NGramTokenizerFactory' per tutti gli indici, non solo per' Text'? Ho provato a cercare il film "The Dancing Masters" usando "Danci", che funzionava. Ma non ha funzionato per cercare 'Danc', qualche idea perch? Non si dovrebbe impostare il limite 'NGramTokenizerFactory' su 3? – Oleander

+0

Analisi (tokenizer, ecc.) Sono definite per campo in Solr. Se si desidera indicizzare tutto il testo in tutti i campi contemporaneamente, è possibile definire un campo di copia che lo faccia automaticamente. Sospetto che la partita "Danci" sia dovuta alla tokenizzazione e non a NGram. Se si scherza nello strumento di amministrazione in cui è possibile vedere i risultati dell'analisi, si dovrebbe essere in grado di dire. –

+0

L'utilizzo di copyField ha funzionato alla grande. [Qui] (https://gist.github.com/1272526) è il risultato. Conosci per caso altri filtri dio che potrei includere nel mio file schema.xml? – Oleander

Problemi correlati