2011-10-06 10 views
8

L'ultima opzione per risolvere questo per me è stato chiedere a StackOverflow.Come OR valore null nella query Apache Solr?

Sto cercando di creare una query Solr per ottenere i documenti che hanno un valore specifico su uno dei suoi campi o che non hanno un valore ...

In teoria, questa query dovrebbe hanno lavorato.

Ecco alcune informazioni:

Query: (nome: john) - count> Risultato: 15383 // Johns

Query: (nome: {* a *}) - -> conteggio Risultato: 61013 // Le persone che hanno un nome

Query: - (nome: {* a *}) -> conteggio Risultato: 216888 // Le persone che non hanno un nome

Ora, quando uso la prima e la terza query in una stessa query con l'operatore OR, mi aspetto di ottenere i risultati (216888 + 15383). Ma SOLR dà 15383 risultati, semplicemente ignora l'effetto della terza interrogazione:

Query: + ((nome: john) (- (nome: {* a *}))) // Questa è la query ero Usato.

È un errore di Solr o sto sbagliando nella query? L'unione di due risultati di query è una soluzione aggiuntiva, ma non voglio eseguire un'implementazione di codice aggiuntiva se potessi farlo con una semplice query.

Qualsiasi aiuto sarebbe apprezzato.

risposta

16

(-name:[* TO *] AND *:*) OR name:john

+0

ha funzionato da me !! – Raj

+0

Questo è proprio quello di cui avevo bisogno. Grazie. Sareste in grado di spiegare cosa 'AND *: *' fa in questo esempio? Vedo che la mia ricerca non funziona se esco da quella parte, non sono sicuro del perché. –

+0

'*: *' significa tutte le righe. '*: * -name: *' significa tutte le righe senza un valore di nome. 'nome: john OR (*: * -name: *)' può essere tradotto in SQL come 'name = 'john' O nome IS NULL' – Semra

-1

provare la query qui sotto -

q=(name:john OR -(name:[* TO *])) 
+0

Stesso stesso. 15383 risultati. – emregecer

+2

Ho trovato la soluzione in questo [collegamento] (http://stackoverflow.com/questions/1343794/searching-for-date-range-or-null-no-field-in-solr) – emregecer

+1

- (- (nome: john) + (nome: {* TO *})) – emregecer

1

È inoltre possibile utilizzare in questo modo.

&fq=name:john OR !name:['' TO *] 
Problemi correlati