2009-12-29 16 views
22

sto usando il motore di ricerca Apache Solr per indicizzare il mio database sito ..Apache solr ricerca parte della parola

sto usando django + http://haystacksearch.org/

Quindi cerchiamo di dire che ho documento che hanno parola "pollo "

Quando cerco 'pollo' - solr può trovare questo documento

ma se cerco 'chick' - non trova nulla ..

C'è un modo per risolvere questo problema?

risposta

18

Nota: la seguente soluzione è Solr 1.4 (e successiva) specifica!

Per maggiore flessibilità, suggerisco di indicizzare i dati con lo NGramTokenizerFactory per eseguire ricerche di caratteri jolly front e back completi. Se si desidera cercare sottostringhe all'inizio o alla fine della stringa, prendere in considerazione l'utilizzo di EdgeNGramTokenizerFactory.

Ecco una goccia in sostituzione del tipo di campo di testo che potessero accogliere il vostro bisogno:

<fieldType name="text" class="solr.TextField" > 
<analyzer type="index"> 
    <tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="15" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 
<analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory" /> 
    <filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 
</fieldType> 
+0

solr 1.5 - è questa versione di sviluppo? (non rilasciato?) –

+1

c'è una soluzione come questa per 1.4? –

+0

Buona cattura: ho corretto la risposta per riflettere 1.4 – Brian

7

Se si desidera trovare tutte le parole che iniziano con pulcino, cercare pulcino *.

+0

Non sono in grado di usare \ * pulcino \ *? È possibile? –

+0

@soundar, Quella è una ** bad ** chick;) Non puoi avere * di fronte alla parola chiave di ricerca, Lucene non lo supporta. –

1

Un approccio diverso, se si hanno problemi con un piccolo insieme di parole, potrebbe essere quella di utilizzare il solr. SynonymFilterFactory

http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.SynonymFilterFactory

devi solo per mantenere un semplice file di testo che contiene i sinonimi:

chick peep chicken 
dawg hound dog 
moggie puss kitten cat 

I plurali devono prendersi cura di se stessi con altri filtri.

4

Quando ho usato

<tokenizer class="solr.NGramTokenizerFactory" minGramSize="3" maxGramSize="15" /> 

per fare ricerca con caratteri jolly dalla risposta di Brian, Solr tempo indicizzazione dramaticly aumentato. In più di 20 volte! L'altra decisione del jolly ricerca problema che ho trovato qui:

http://www.lucidimagination.com/blog/2009/09/08/auto-suggest-from-popular-queries-using-edgengrams/

è necessario solo aggiungere filtro

<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="25" /> 

(tokenizer di default - solr.WhitespaceTokenizerFactory nel blocco indice FieldType). Per me il risultato è stato lo stesso con meno costi di sistema.

0

Non ho modificato alcuna configurazione. Sto solo usando la stella davanti e dietro la mia searchString: * chicke * (senza spazi bianchi alla fine -> è per via della formattazione SO come corsivo se usi * all'inizio e alla fine)