2

Solrの学習を始めたばかりです。Solrpy をクライアントとして使用しようとしています。私のpythonコードは次のとおりです。

import solr

# create a connection to a solr server
s = solr.SolrConnection('http://localhost:8983/solr')

# add a document to the index
doc = dict(
    id='testid123',
    title='Lucene in Action',
    author=['Erik Hatcher', 'Otis Gospodneti'],
    )
s.add(doc, commit=True)

# do a search
response = s.query('title:lucene')
for hit in response.results:
    print hit['title']

これはここで与えられた例からのものです

私の solr schema.xml は、solr ディストリビューションに付属するデフォルトのスキーマです。私はそれに何の変更も加えていません。「id」としてuniqueKeyフィールドがあります。

<uniqueKey>id</uniqueKey>

しかも文字列型です

<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" /> 

それでもコードを実行すると、クライアント側でエラーが発生します:

Traceback (most recent call last):
  File "/Users/user1/Documents/workspace/PyDelight/src/Test.py", line 12, in <module>
    s.add(doc, commit=True)
  File "/Library/Python/2.7/site-packages/solrpy-0.9.5-py2.7.egg/solr/core.py", line 678, in add
    return Solr.add_many(self, [fields], commit=_commit)
  File "/Library/Python/2.7/site-packages/solrpy-0.9.5-py2.7.egg/solr/core.py", line 326, in wrapper
    return self._update(content, query)
  File "/Library/Python/2.7/site-packages/solrpy-0.9.5-py2.7.egg/solr/core.py", line 550, in _update
    rsp = self._post(selector, request, self.xmlheaders)
  File "/Library/Python/2.7/site-packages/solrpy-0.9.5-py2.7.egg/solr/core.py", line 639, in _post
    return check_response_status(self.conn.getresponse())
  File "/Library/Python/2.7/site-packages/solrpy-0.9.5-py2.7.egg/solr/core.py", line 1097, in check_response_status
    raise ex
solr.core.SolrException: HTTP code=400, reason=Bad Request

そして、solrトレース側でエラーが発生します:

843169 [qtp1151734776-20] INFO  org.apache.solr.update.processor.LogUpdateProcessor  ? [collection1] webapp=/solr path=/update params={commit=true} {} 0 0
843170 [qtp1151734776-20] ERROR org.apache.solr.core.SolrCore  ? org.apache.solr.common.SolrException: Document is missing mandatory uniqueKey field: id

schema.xml ファイルは solr-4.4.0/example/solr/collection1/conf にあります

そして、サンプルディレクトリでstart.jarを実行するだけでsolrを実行しています。

私が間違っているところはありますか?

4

2 に答える 2

3

私はsolrpyをあまり使用していません(そしてまだインストールしていません)が、最初の例から、辞書の代わりに属性=値のペアで呼び出されたいようです。(あなたが投稿した例がオンラインの 0.9.2 ドキュメントからのものであることは知っていますが、github の現在のソースのコメントにはこれがあります):

add(**params)
        Add a document.  Pass in all document fields as
        keyword parameters:
            add(id='foo', notes='bar')
        You must "commit" for the addition to be saved.

だからこれを試してください:

s.add(commit=True, **doc)     

そしてそれはおそらくうまくいくでしょう。コミットを引き出して個別に行う必要があるかもしれませんが、わかりません。

私はsolrの専門家ではなく、少し遊んだだけですが、solrpyよりもsunburntを使用した方が幸運でした。一見の価値があります。

編集: そのファイルへの github ポインターは次のとおりです: http://code.google.com/p/solrpy/source/browse/solr/core.py

于 2013-10-01T01:16:49.973 に答える