2012-05-23 14 views

risposta

34

Il modo canonico è questo:

fieldName:[* TO *] 

Utilizzando un '' sul lato sinistro come Paige Cook ha suggerito probabilmente funzionerà anche, ma non mi fido tanto quanto faccio quanto sopra. E poiché questo è in un campo Location, probabilmente dovrai farlo contro uno dei due campi effettivi sottostanti rispetto a questo campo composito logico. Iniziano con fieldName e terminano con una sorta di suffisso numerico; guarda nel Browser Schema per vedere qual è il vero nome.

Una cosa importante da tenere presente è che una query di questo tipo è costosa per Solr, poiché esegue una scansione dell'indice completa su questo campo. Se hai molti valori di campo di posizione distinti (migliaia in su?), Allora questo è un grosso problema. Se lo fai in una query di filtro, verrà memorizzato nella cache ed è forse discutibile. Se si desidera eseguire rapidamente questa query, al momento dell'indice è necessario indicizzare un campo booleano per indicare se esiste o meno un valore in questo campo.

+0

Grazie a David, la sintassi [* TO *], combinata con la verifica di entrambi i campi di supporto, sembra funzionare correttamente (ad esempio 'campo_0_coord: [* TO *] AND campo_1_coord: [* TO *]'). Grazie anche per il suggerimento per le prestazioni! – STW

+1

Non devi farlo contro entrambi i campi coord, che è due volte più lento, solo uno. Se uno ha un valore, l'altro lo fa e viceversa. –

6

È possibile aggiungere questo alla vostra domanda fieldname:['' TO *]. Questo sarà l'equivalente di un controllo NOT NULL.

ho ottenuto questo dal post - Solr - Field Not Null Searches

+0

Grazie Paige, ma sfortunatamente non sembra funzionare per il 'Location' – STW

+0

per espandere un po 'di più, il campo così come i campi di supporto sono numerici; valutandoli con '''' si ottiene una NumberFormatException – STW

+0

Scusa se mi sono perso che era numerico. David Smiley ha la risposta corretta. –

4

Per un campo di posizione (solr.LatLonType), utilizzare la seguente query di filtro: -fieldName:[-90,-180 TO 90,180] (le coordinate al di fuori di questo intervallo sono ancora validi)

-2

Prova questa q= !fieldname:NULL questo sarà equivalente a Fieldvalue non è nulla.

Chiesto da STW Ho un indice Solr con un set di coordinate memorizzato come tipo di posizione; Vorrei interrogare per i documenti in cui questo campo ha un valore non nullo.

Qual è la sintassi della query per eseguire il controllo NOT NULL in un campo Posizione?