2017-02-07 1 views
0

私は現在、いくつかのファイルのインデックスを作成するためにSolrClientを使用して小さなPythonプログラムを作成しようとしています。SolrClient python update document

私はいくつかのファイルの内容を索引付けしてから、文書を充実させるためにいくつかの属性を追加したいと思っています。 私は、コマンドラインツールを使ってファイルを索引付けしました。

doc = solr.get('collection', id) 
doc['new_attribute'] = 'value' 
solr.index_json('collection',json.dumps([doc])) 
solr.commit(openSearcher=True) 

問題私たちは、ファイルのコンテンツインデックスを失った感覚を持っていることである。それから私はこのようなものは、文書を豊かにしようとしているのpythonプログラムを使用します。ドキュメントのすべての属性に単語が含まれているクエリを実行すると、それを見つけることができます。

ファイル内の単語のみを使用してクエリを実行すると、機能しません(暫定的な更新がない投稿のファイルのみのインデックス作成が機能します)。

投稿コマンドによって作成されたインデックスを保持しているドキュメントを更新する方法を理解できません。

私は私が正しく理解していれば、既存のレコードを変更したい

おかげでたくさん

答えて

0

...多分私はそれが動作する方法を誤解し、私は十分に明確だ願っています。あなたはsolr.getを使用せずに、このような何かを行うことができる必要があります:

doc = [{'id': 'value', 'new_attribute':{'set': 'value'}}] 
solr.index_json('collection',json.dumps([doc])) 

も参照してください: https://cwiki.apache.org/confluence/display/solr/Updating+Parts+of+Documents

+0

こんにちは、私もこれを試してみましたが、運。あらかじめ定義されたフィールドを持つスキーマを使用している可能性がありますか? postコマンドを使用すると、いくつかのフィールドが設定されず、後でindex_jsonを使って設定しようとします。 – user1923976

+0

new_attributeフィールドはスキーマで定義されていますか(静的または動的に定義する必要がありますか?値をリストに入れるか、 'add'を使用する必要があります。また、上記のリンクで説明したように_version_を確認してください。まず、curlで更新して、SolrClientを使用せずに動作するかどうかを確認することをおすすめします。 –

0

何も変更しませんでしたカールをしようとしています。私は違ったことをしたので、それは今働く。 postコマンドでファイルを追加して後で変更するのではなく、ファイルを "content"フィールドの文字列とインデックスで読み込みます。つまり、すべてのドキュメントがワンショットで追加されます。

コンテンツフィールドは格納されていないと定義されているため、インデックスを作成します。

これはうまく動作し、私のニーズに合っています。それは、私が必要としないpostコマンドで設定された多くの属性を削除するので、より簡単です。

時間が見つかったら、部分的な更新をもう一度試して、投稿を更新します。

おかげ レミ