2012-03-05 20 views
5

nel mio file di schema solr ho un campo di ricerca di default che utilizza EdgeNGramFilterFactorydi ricerca in Solr con EdgeNGramFilterFactory e durata min della query di ricerca

<filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="15" side="front" /> 

presume che la mia query di ricerca è

tes 

così ottengo risultati così:

tess 
test 
tesla 
... 

se cerco

test 

ottengo risultati come

test 
tess 
tesla 
... 

suo ok perché io uso EdgeNGramFilterFactory con minGramSize = 3 ma voglio la seguente:

Quando cerco una stringa la cui lunghezza è più di 3 caratteri (ad esempio test) Voglio che il solr ignori tutti i termini composti da 3 caratteri (EdgeNGramFilterFactory). Quando cerco "test" non voglio ottenere risultati come "tess" o "tesla". I wont ottenere risultati che iniziano con la prova (4 caratteri) come

test 
test for 
test-drive 
... 

E 'possibile configurare che nel solr?

risposta

5

È possibile configurare il filtro EdgeNGram solo nell'analizzatore di indici del campo; per l'analizzatore di query, eseguire comunque la tokenizzazione normale senza alcun EdgeNGram. In questo modo, quando si cerca "test", verranno restituiti solo i risultati preceduti dal "test" esatto.

config, ad es. (non definire EdgeNGram per query analyzer)

<fieldType name=...> 
    <analyzer type="index"> 
     ... 
     <filter class="solr.EdgeNGramFilterFactory" minGramSize="4" maxGramSize="15" side="front" /> 
    </analyzer> 
    <analyzer type="query"> 
     ... 
     <!-- <filter class="solr.EdgeNGramFilterFactory" minGramSize="4" maxGramSize="15" side="front" /> --> 
    </analyzer> 
</fieldType>