2010-01-27 17 views
9

Sono nuovo nell'usare Solr e mi manca qualcosa.Interrogazione di Solr senza specificare i nomi dei campi

Non ho ancora toccato molto nello schema di esempio e ho importato alcuni dati di esempio. Ho anche impostato LocalSolr e sembra funzionare bene.

Il mio problema riguarda solo le query Solr in generale. Ho un documento in cui il campo nome è impostato su tom. Continuo a guardare i file di configurazione e non riesco a capire dove sto andando storto. Un sacco di campi sono indicizzati e memorizzati, e posso vedere i valori nell'amministratore, ma non riesco a far funzionare le query correttamente. Ho provato varie query (http://server.com/solr/select/?q=value), ed ecco i risultati:

**Query:** ?q=tom 
**Result:** No results 

**Query:** q=\*:\* 
**Result:** 10 docs returned 

**Query:** ?q=*:tom 
**Result:** No results 

**Query:** ?q=name:tom 
**Result:** 1 result (the doc with name : tom) 

voglio ottenere il primo caso (?q=tom) lavoro. Qualsiasi input su cosa potrebbe andare storto, e su come posso correggerlo, sarebbe apprezzato.

risposta

13

Set <defaultSearchField>-name nella vostra schema.xml

Il <defaultSearchField> viene utilizzato da Solr durante l'analisi di query per identificare che il nome del campo deve essere cercata in query in cui un esplicito il nome del campo non è stato utilizzato.

Si potrebbe anche voler controllare (e)dismax invece.

+0

Nice! Questo era esattamente ciò di cui avevo bisogno. Non ho visto questa opzione prima, e ora avere un sacco di campi di copia che puntano a un grande campo di "testo" ha senso. Grazie mille! –

+0

L'ho modificato nel mio file solconfig.xml, sto usando SOLR 7.2.0 –

0

Passando attraverso il tutorial solr è sicuramente merita il vostro tempo: http://lucene.apache.org/solr/tutorial.html

La mia ipotesi è che il campo "Nome" non è indicizzata, quindi non è possibile cercare su di esso. Dovresti cambiare lo schema per renderlo indicizzato.

Assicurati inoltre che il tuo XML si allinea effettivamente con lo schema. Quindi se stai aggiungendo un campo chiamato "nome" nel file xml, ma lo schema non lo sa, Solr ignorerà quel campo (cioè non sarà "archiviato" o "indicizzato").

Buona fortuna

+1

Il campo è sicuramente indicizzato. Inoltre, se non fosse, non potrei fare alcune delle domande che ho elencato, giusto? Qualcosa come il nome: tom non funzionerebbe, se capisco i documenti. –

+0

sì Mauricio ha ragione, che è necessario specificare il DefaultSearchField nel solrconfig. Inoltre, se si utilizza DisMax (che consentirebbe a? Q = tom di provocare una ricerca in più campi contemporaneamente), esiste un'altra impostazione denominata "qf" – mlathe

0

Ebbene, nonostante l'impostazione di un campo di ricerca di default è molto utile non capisco perché non basta usare la sintassi di query solr:

......./?q=name:tom 

o

..... ../?q= : & FQ = nome: Tom

+0

ok, manca leggere il titolo :-( – Lici

6

ho appena imbattuto in un problema simile ... più campi Vale a dire che ho definiti (che non esistevano nel schema.xml) per descrivere il mio documenti e vogliono cercare/interrogare su più campi del documento, non solo uno di essi (come il "nome" nell'esempio sopra citato).

Per ottenere ciò, ho creato un nuovo campo ("compoundfield"), in cui quindi ho inserito/copiaField i miei campi definiti (proprio come il campo "testo" sul documento schema.xml fornito con la distribuzione Solr).Ciò si traduce in qualcosa di simile:

definizione coumpoundfield:

<field name="compoundfield" type="text_general" indexed="true" stored="false" multiValued="true"/> 

defaultSearchField:

<!-- field for the QueryParser to use when an explicit fieldname is absent --> 
<defaultSearchField>compoundfield</defaultSearchField> 

<!-- SolrQueryParser configuration: defaultOperator="AND|OR" --> 
<solrQueryParser defaultOperator="OR"/> 

<!-- copyField commands copy one field to another at the time a document 
    is added to the index. It's used either to index the same field differently, 
    or to add multiple fields to the same field for easier/faster searching. --> 
<!-- ADDED Fields --> 
<copyField source="field1" dest="compoundfield"/> 
<copyField source="field2" dest="compoundfield"/> 
<copyField source="field3" dest="compoundfield"/> 

Questo funziona bene per me, ma io non sono sicuro se questo è il migliore modo per fare una ricerca di "campo multiplo" ...

Cheers!

1

La soluzione attuale è deprecato in versioni più recenti di Lucene/Solr. Per modificare il campo di ricerca predefinito o utilizzare il parametro df o modificare il campo che si trova in:

<initParams 
path="/update/**,/query,/select,/tvrh,/elevate,/spell,/browse"> 
    <lst name="defaults"> 
     <str name="df">default_field</str> 
    </lst> 
    </initParams> 

all'interno del solrconfig.xml

Nota Sto usando uno schema non gestiti e solr 7.0.0 al momento di scrittura

Problemi correlati