2016-09-09 2 views
0

ich einen bestimmten Wert aus einem mehrwertig Feld in einem großen Index entfernen möchten, wo ich abfragen, müssen zuerst die Dokumente diesen Wert enthalten, dh:Solr: entfernen Wert mit teilweise Aktualisierung durch Abfrage

  1. abrufen IDs der Dokumente, die den spezifischen Wert enthalten.
  2. teilweise diese Dokumente aktualisieren (mit remove).

Solr-Version ist 5.1. Ich könnte bei Bedarf aktualisieren, aber die Änderungsprotokolle zeigen keine Relevanz für dieses Problem an.

Ich habe die folgende Abfrage (in einigen Variationen) versucht, auf dem /select Endpunkt durch die Solr Web-Interface (http://localhost:8983/solr/#/core/documents), versuchen, den Wert von allen Dokumenten zu entfernen:

{"id":"*", "field": {"remove":"value"} } 

Die Serverantwort ist "Erfolg", aber kein Dokument wird aktualisiert.

Was ich tun könnte, ist Abfrage für field:value, extrahieren Sie die Dokument-IDs und (programmatisch) generieren Update-Abfragen für diese IDs, ähnlich wie in this answer angezeigt wurde. Aber ich würde erwarten, dass es eine einfachere Lösung geben sollte.

Die Beispiele in der partial updates documentation und andere verwandte Webseiten sind hier nicht wirklich anwendbar, da sie davon ausgehen, dass die ID der aktualisierten Dokumente im Voraus bekannt sind. Die meisten anderen Diskussionen über ähnliche Probleme beziehen sich auf alte Solr-Versionen, bevor Teilupdates eingeführt wurden (in Solr 4).

Antwort

0

Soweit ich weiß, gibt es in Solr im aktuellen Moment keine "Update by Query" -Funktionalität, so dass das Holen und Aktualisieren immer noch der empfohlene Weg ist.

Das Batching dieser Updates (ein select, ein update) sollte jedoch wie erwartet funktionieren und die Anzahl der an Solr gestellten Anfragen reduzieren.

Verwandte Themen