2013-07-02 12 views
5

Non riesco a recuperare i termini con sillabazione nei risultati della ricerca SOLR. Ad esempio, quando provo a fare una ricerca come: superman, super man ecc., Dovrei vedere titoli come super-man, super-man3 ecc. Nei miei risultati di ricerca.Solr: la ricerca di termini con sillabazione restituisce 0 risultati

Il FieldType è la seguente:

<fieldType name="autocomplete_edge" class="solr.TextField"> 
    <analyzer type="index"> 
     <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt" /> 
     <tokenizer class="solr.KeywordTokenizerFactory" /> 
     <filter class="solr.LowerCaseFilterFactory" /> 
     <filter class="solr.PatternReplaceFilterFactory" pattern="([\.,;:-_])" replacement=" " replace="all" /> 
     <filter class="solr.EdgeNGramFilterFactory" maxGramSize="30" minGramSize="1" /> 
     <filter class="solr.PatternReplaceFilterFactory" pattern="([^\w\d\*æøåÆØÅ ])" replacement="" replace="all" /> 
    </analyzer> 
    <analyzer type="query"> 
     <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt" /> 
     <tokenizer class="solr.KeywordTokenizerFactory" /> 
     <filter class="solr.LowerCaseFilterFactory" /> 
     <filter class="solr.PatternReplaceFilterFactory" pattern="([\.,;:-_])" replacement=" " replace="all" /> 
     <filter class="solr.PatternReplaceFilterFactory" pattern="([^\w\d\*æøåÆØÅ ])" replacement="" replace="all" /> 
     <filter class="solr.PatternReplaceFilterFactory" pattern="^(.{30})(.*)?" replacement="$1" replace="all" /> 
    </analyzer> 
</fieldType> 

prega di aiuto.

saluti

+0

puoi pubblicare il fieldtype in un formato più leggibile? – Jayendra

+0

Ciao, la domanda originale è stata modificata per avere il contenuto in un formato più leggibile.I termini di ricerca come super, super-, super-uomo, superman restituiscono i titoli desiderati. Il caso dove sta fallendo è: super man che dà 0 risultati –

risposta

2

Io suggerirei di usare WordDelimiterFilterFactory per il vostro caso d'uso.

WordDelimiterFilterFactory consente di generare token che possono essere divisi su caratteri e numeri speciali e inoltre di mantenere l'originale in modo che corrisponda ai termini di ricerca.

per es.
generateWordParts convertirebbe super-man ->super, man
splitOnNumerics genererebbe super-man3 ->super, man, 3
catenateWords convertirebbe super-man ->superman
catenateAll convertirebbe super-man3 ->superman3

Quindi questo avrebbe fornito la possibilità di corrisponde alla combinazione delle stesse parole

0

Supponendo che tu sia tokeni zing your hyphens ok (vedi WordDelimiterFilterFactory come menzionato nella risposta sotto) allora è il tuo campo predefinito (df) nel tuo solr config file o passato come parametro (& df = xxxx) lo stesso del campo su cui stai facendo la tokenizzazione?

Dite il vostro campo di default è: il testo e il vostro campo indicizzato è: nome

Se interroghiamo per super uomo

name:super man 

La query reale è:

parsedquery_toString: "+name:super +text:man" 

che ha vinto combaciare Se si esegue una query per l'uomo eccellente tra virgolette:

name:"super man" 

dovrebbe funzionare bene, ma è meno flessibile:

parsedquery_toString: "name:\"super man\"", 

se si imposta il df per nome (ad esempio, che corrisponde al campo indicizzato) dà:

parsedquery_toString: "+name:super +name:man" 

o si può direttamente interrogare

name:super name:man 

Nota se si utilizza dismax potrebbe essere necessario controllare il campo mm se non si sta ancora verificando la corrispondenza.

Problemi correlati