2008-11-07 6 views
23

Wie kann ich alle Dokumente von Solr mit dem booleschen NOT-Begriff auswählen/löschen?Boolean NOT in solr Abfrage

d. H. Wie lösche ich alle Dokumente von Solr, deren ID nicht mit A59 beginnt?

Antwort

56

Verwenden Sie '-', um NICHT anzugeben.

Zum Beispiel zur Abfrage von Dokumenten mit der ID nicht mit A59 beginnen, die Abfrage sei: -id:A59*, das heißt: /solr/select/?q=-id:A59*

durch Abfrage zu löschen, schreiben Sie die Abfrage in einer Löschnachricht an den Update-Handler, wie spezifizierte here.

EDIT: NOT (Großbuchstaben), auch als Operator verwendet werden kann

1

Ich glaube nicht, dass eine negative löschen, indem Sie Abfrage funktioniert. Sehen Sie dieses Jira-Ticket: https://issues.apache.org/jira/browse/SOLR-381

Sie sagen, dass es eine Problemumgehung gibt, in einem vorzufügend:, aber ich habe kein Glück damit.

Das funktioniert nicht (gleich nicht verwenden) java -Ddata = args -jar /opt/solr/example/exampledocs/post.jar "-userid: *" java -jar/opt/Solr/example /exampledocs/post.jar * .xml

in einem Hinzufügen: gibt einen Syntaxfehler (gleiche mit der Verwendung von NOT) java -Ddata = args -jar /opt/solr/example/exampledocs/post.jar „: - Benutzer-ID: *“ java -jar /opt/solr/example/exampledocs/post.jar * .xml

SimplePostTool: Version 1.4 SimplePostTool: Ausbuchen args http://localhost:8983/solr/update .. SimplePostTool: FATAL: Solr lieferte eine # 400 Fehler Fehler bei der Analyse Lucene Abfrage SimplePostTool: Version 1.4

7

Exclamation für nicht so gut funktioniert, so:

/solr/select/?q=!id:A59* 

sollte oben in dem Fall arbeiten.

+1

Diese Antwort funktionierte nicht, wo wie oben, ich bin mir nicht sicher, aber ich denke '' '' könnte tatsächlich etwas andere Semantik haben – Sammaye

0

vor dem Löschen stellen Sie bitte sicher, dass die IDs, auf die Sie sich beziehen, eine Zeichenfolge sind und in keiner Weise aus zwei zusammengesetzten Begriffen bestehen. Die Art, wie ich es tun würde, liest die Daten von solr aus einem Skript und führen ein einzelnes Löschen oder in Batches, weil es eine bessere Kontrolle und Validierungen über jede IDs bietet, die das Risiko eines falschen Löschens reduziert 1 lesen Sie die Daten von solr aus einem Skript /Solr/select/q = id mit: A59 *

2 verifizieren und validieren die ids

3 löschen sie einzeln oder in einer Gruppe von 10 IDs auf einmal

Mit freundlichen Grüßen

R ajat

0

Wie Mauricio erklärte:

Verwenden Sie das - Symbol, um anzuzeigen, was Sie in Ihrer Abfrage ausschließen möchten. Die folgenden zwei Abfragen löschen alle Dokumente außer denen, die mit A59 beginnen.

GET http://<url>/solr/<core>/update?stream.body=<delete><query>-id:A59*</query></delete> 
GET http://<url>/solr/<core>/update?stream.body=<commit/> 

Die erste Zeile löscht den Löschvorgang. Die zweite Zeile übernimmt das Commit.

0

Die Verwendung des - Symbols vor den Dateien impliziert, dass dieser bestimmte Wert ausgeschlossen wird. Es wird Ergebnis geben wie NICHT gleich

Das folgende Beispiel ist URL-Abfragezeichenfolge wo. Ich habe gehalten "& fq = -HQ_City_Code: MEL",

Es wird überspringen alle das Ergebnis, das HQ_City_Code Wert MEL ist mit.