2011-11-23 11 views
15

Ho un problema nella ricerca SOLR.
Ho un di dati come questo:
enter image description hereRicerca SOLR maiuscole/minuscole

Io uso solr amministratore di trovare questi dati utilizzando query come questa:

address_s:*Nadi* 

e hanno trovato tali dati. Ma quando uso questa query:

address_s:*nadi* 

non ha trovato nulla.
Ho googling ed ho trovato una risposta per creare un campo con il seguente script:

<fieldType name="c_text" class="solr.TextField"> 
    <analyzer type="index"> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 

    <analyzer type="query"> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

ho copia incolla quelli script nella schema.xml, ma ancora non funziona. Cosa dovrei fare? Qualcuno può aiutarmi?

risposta

11

Il campo address_s dovrebbe essere definito come -

<field name="address_s" type="c_text" indexed="true" stored="true"/> 

Se si utilizza lo schema.xml impostazione predefinita, questa defination dovrebbe venire prima -

<dynamicField name="*_s" type="string" indexed="true" stored="true"/> 

che la definisce come un tipo di campo di stringa senza analisi eseguita.

Le query con caratteri jolly non vengono analizzate.
Quindi, se si applica il filtro minuscolo al momento dell'indice, la query address_s:*nadi* funzionerebbe.
Tuttavia, la query address_s:*Nadi * non dovrebbe, in quanto Nadi, non corrisponderà a nadi nell'indice e sarà necessario ridurre le query sul lato client.

+1

Ho seguito le tue istruzioni, ma non può ancora funzionare. Copio pasta '' per schema.xml, e ri-run 'java-jar start.jar' e ho cercato la query . Scusate, voglio prima chiedere, ho usato schema.xml in .. \ solr_302 \ esempio \ solr \ conf, è quello giusto,.? – Praditha

+0

hey è lavoro, ho bisogno di reinserire il documento prima. Grazie,. sai come definire quei campi tramite PHP,.? quindi non ho bisogno di definirlo manualmente in schema.xml. – Praditha

+5

'Tuttavia, address_s di query: * * Nadi sarebbe non, come Nadi non corrisponderanno Nadi in index' - Ma non è che il punto di avere' LowerCaseFilterFactory' in '', in modo Quelle * query * sono in minuscolo automaticamente? – Madbreaks

5

Il campo address_s utilizza questo tipo di campo c_text nello schema.xml?

Se l'indice è stato creato con la configurazione precedente, è necessario reindicizzare tutto per tenere conto delle modifiche.

+0

Come farlo,.? perché faccio tutti i campi usando php. Inserisco tutti i campi in un array come questo: $ data = array (..., 'address_s' => 'valore', 'city_name_s' => 'valore', ...); e utilizzare la funzione addDocument ($ data). Qualche idea.,? – Praditha

+3

Quindi è necessario rieseguire questi comandi per tutti i documenti che sono stati aggiunti all'indice. La rappresentazione dei dati nell'indice dipende dall'analizzatore che è stato utilizzato. Pertanto, se si aggiorna l'analizzatore che si utilizza per l'indicizzazione, è necessario reindicizzare tutti i documenti. – jpountz

+0

dispiace, io continuo a non capire che cosa devo fare, puoi descrivere passo dopo passo: D e quando devo usare 'tipo di campo c_text' a tutti indice, quando ho eseguire nuovamente il mio comando php,.? – Praditha

5

Ho usato questo come tipo di campo:

<fieldType name="string" class="solr.TextField"> 
    <analyzer type="index"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

e definito i miei campi utilizzando:

<field name="address" type="string" indexed="true" stored="true"/> 

Il risultato: Il documento riporta i campi nel caso a destra (come inserito) e posso cercare senza distinzione tra maiuscole e minuscole (utilizzando lettere maiuscole e minuscole) ...

Versione: Solr 3,6

+0

questo ti darà un errore –

1

Ho usato qualcosa di simile ... Nello schema.xml 'ho messo un nuovo fieldType

<fieldType name="newType" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer type="index"> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.ReversedWildcardFilterFactory" /> 
     </analyzer> 
     <analyzer type="query"> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.ReversedWildcardFilterFactory" /> 
     </analyzer> 
</fieldType> 

Assegnare il nuovo tipo di campo che si desidera rendere caso & spazi insensitive Poi si deve costruire la query solr nella forma: fieldName:(*fieldValue\ *)

1

invece di type="string" definire il campo type="text_general" (come definito nello schema.xml predefinito). Su eof la sua proprietà è ignore case=true

-2

Come si fa a non distinguere tra maiuscole e minuscole una raccolta che utilizza uno schema dinamico (o uno schema guidato dai dati)? Collezione è stato creato come: su - solr -c "/opt/solr/bin/solr create -c Mock2 -n data_driven_schema_configs"

Problemi correlati