2016-11-16 6 views
2

更新: Pysolrバージョン:3.2.0pysolr更新文書が

これはSolrの中にバグが考えられます。操作で何も更新しないと、この文書は削除されます。

元私はusing pysolr in atomic updateにコードを使用しましたが、以下のケースでエラーが発生しました。

は今、多分、このような文書スキーマ:

doc = { 
    'id': ..., 
    'title': ..., 
    'body': ..., 
} 

私は、ドキュメントのバッチをインデックス化しているし、今は新しいフィールドanchor_textですべてのドキュメントを更新したいです。ここに私のコードです:

solr = pysolr.Solr(url_solr) 
doc_update = { 
    'id': ..., 
    'anchor_text': [a,b,c,...] 
} 
solr.add([doc_update], fieldUpdates={ 
    'anchor_text': 'set' 
}) 

しかし、私は、元のドキュメントのいくつかののみIDフィールドの左にを取り除いたを発見しました。更新後のこのような 何かを:

doc = { 
    'id':... 
} 

特に、そのanchor_textフィールド空のリストであるそれらのために、オリジナルのドキュメントが削除されます。他の人はそうではありませんが(おそらく、私はいくつかのケースしか見ないので推測します)。

私はソースコードを見てきましたが、価値のあるものは何も見つかりませんでした。何が起きてる?

更新文書でピソルバーを使用する正しい方法は何ですか?

答えて

1

私は同じ問題(python-3.6、pysolr-3.6、solr 6.4.1)に遭遇しました。それ以上の情報をオンラインで見つけることができなかったので、誰にでも使用できるようにするためにここに残すリクエストの回避策を使用しました。

import requests 
import json 

def update_single_solr_field(doc_id_field, doc_id, field_update_name, field_update_value): 
    # Updates a single field in a document with id 'doc_id'. 
    # Updates only the 'field_update_name' field to the 'field_update_value', leaving other fields intact 

    base_url = 'http://localhost:8983/' 
    solr_url = 'solr/mysolrcore/' 
    update_url = 'update?commit=true' 
    full_url = base_url + solr_url + update_url 
    headers = {'content-type': "application/json"} 

    payload = [{ 
     doc_id_field: doc_id, 
     field_update_name: { 
      'set': field_update_value 
     } 
    }] 

    response = requests.post(full_url, data=json.dumps(payload), headers=headers) 

    return response 

# example 
id_field_name = 'id' 
doc_id_to_update = '1700370208' 
field_to_update = 'weight_field' 
field_to_update_value = 20000 
response_update = update_single_solr_field(id_field_name, doc_id_to_update, field_to_update, field_to_update_value) 

print(response_update) 
関連する問題