2012-05-23 4 views

Antwort

34

Die kanonische Weise ist dies:

fieldName:[* TO *] 

ein '' auf der linken Seite verwenden, wie Paige Koch wahrscheinlich vorgeschlagen arbeiten, aber ich traue es so viel wie ich das oben mache. Und da dies ein Standortfeld ist, müssen Sie dies wahrscheinlich mit einem der beiden zugrundeliegenden tatsächlichen Felder gegenüber diesem logischen zusammengesetzten Feld tun. Sie beginnen mit fieldName und enden mit einer Art numerischen Suffix; Sehen Sie im Schema-Browser nach, wie der tatsächliche Name lautet.

Eine wichtige Sache zu beachten ist hier, dass eine Abfrage wie diese für Solr teuer zu tun ist, da es einen vollständigen Index-Scan für dieses Feld macht. Wenn Sie viele verschiedene Standortfeldwerte haben (Tausende auf?), Dann ist das eine große Sache. Wenn Sie dies in einer Filterabfrage tun, dann wird es zwischengespeichert und es ist vielleicht strittig. Wenn diese Abfrage schnell ausgeführt werden soll, sollten Sie zur Indexzeit ein boolesches Feld indizieren, um anzugeben, ob in diesem Feld ein Wert vorhanden ist oder nicht.

+0

Dank David scheint die [* TO *] - Syntax in Verbindung mit der Überprüfung beider Begleitfelder korrekt zu funktionieren (z. B. 'field_0_coord: [* TO *] AND field_1_coord: [* TO *]'). Danke auch für den Performance-Tipp! – STW

+1

Sie müssen dies nicht für beide Koordinatenfelder tun, was doppelt so langsam ist, nur eins. Wenn einer einen Wert hat, dann der andere, und umgekehrt. –

6

Sie können dies zu Ihrer Abfrage fieldname:['' TO *] hinzufügen. Dies entspricht einer NOT NULL-Prüfung.

ich diese von der Post bekam - Solr - Field Not Null Searches

+0

Dank Paige, aber leider scheint das nicht zu funktionieren für die 'Location' – STW

+0

um ein bisschen mehr zu erweitern, das Feld sowie die Unterstützung Felder sind numerisch; sie gegen '' 'auszuwerten, führt zu einer NumberFormatException – STW

+0

Entschuldigung, dass ich verpasste, dass dies numerisch war. David Smiley hat die richtige Antwort. –

4

Für ein Standortfeld (solr.LatLonType), verwenden Sie die folgende Filterabfrage: -fieldName:[-90,-180 TO 90,180] (die Koordinaten außerhalb dieses Bereichs sind noch ungültig) diese

-2

Versuchen q= !fieldname:NULL dies Fieldvalue gleichwertig sein wird, ist NOT NULL.

Gefragt von STW Ich habe einen Solr-Index mit einer Reihe von Koordinaten als Standorttyp gespeichert; Ich möchte nach Dokumenten suchen, bei denen dieses Feld einen Wert ungleich Null hat.

Wie lautet die Abfragesyntax zum Ausführen der NOT NULL-Prüfung für ein Standortfeld?