2017-11-13 5 views
0

Ich habe Solr 6.6.1 für einen Testaufbau konfiguriert. Nachdem ich einige Dokumente indexiert habe, muss ich einige Felder aktualisieren. Ich benutze Python-Client von solr. Zu aktualisieren, finden Sie meinen Code-SnippetApache Solr 6.6 Dokument ersetzen statt Update

import solr 

def update_solr_index(_id, _value): 
    print solr_conn2.add(id = _id, group2 = _value) 

core_ulr = "http://localhost:8983/solr/use" 
solr_conn2 = solr.SolrConnection(core_ulr) 
update_solr_index(doc_id, field_value) 

Nach der Ausführung (und begehen), alle anderen Felder werden aus allen Materialien entfernt und nur zwei Felder links, die DOC_ID und group2 werden. Was ist das Problem ist diese API oder in meinem Code?

Antwort

1

Es gibt kein Problem in der API. Sie bitten Solr, ein Dokument mit einem ID-Feld hinzuzufügen, das bereits in Ihrer Sammlung vorhanden ist. Die folgenden Aktionen passieren in solr.

  • das vorhandene Dokument entfernen, die die gleiche ID angegeben

  • hinzufügen neues Dokument mit nur den Feldern hat in diesem API-Aufruf

Die Lösung die Sie suchen, ist ein Teil Update eines Dokuments.

Siehe den Referenz Link mehr auf dieser Atomic updates

Sie verstehen müssen, ein Kartenobjekt für das Feld, das Sie in Ihrem Dokument aktualisieren möchten, senden.

solr_conn2.add(id=_id, group2=*****) 

Der Wert group2 muss eine Karte wie diese sein { 'set': 'value ...'}

Sie wahrscheinlich auf diese ähnliche Lösung Stackoverflow similar answer

+0

Es ist wichtig, verweisen zu erwähnen Um atomare Updates zu verwenden, müssen alle Felder auf "gespeichert" gesetzt werden, oder für bestimmte Feldtypen müssen mindestens docValues ​​aktiviert sein. – MatsLindh

+0

Sie haben Recht. Der Link für atomare Updates deckt diesen Punkt ebenfalls ab. –