0

私はpython 3.4.3とsunburntを使用してSolr(5.2.1)にドキュメントを追加しています。次のコードは、Sunburnt のドキュメントから直接引用したものです。

import sunburnt

si=sunburnt.SolrInterface("http://localhost:8983/solr/")

document = {"id":"0553573403",
        "cat":"book",
        "name":"A Game of Thrones",
        "price":7.99,
        "inStock": True,
        "author_t":
        "George R.R. Martin",
        "series_t":"A Song of Ice and Fire",
        "sequence_i":1,
        "genre_s":"fantasy"}

si.add(document)

上記のコマンドを実行すると、次のようになります。

NameError                                 Traceback (most recent call last)
<ipython-input-1-1008a9ce394f> in <module>()----> 1 import sunburnt
  2 
  3 si= sunburnt.SolrInterface("http://localhost:8983/solr/")
  4 
  5 document = {"id":"0553573403",

/Users/rmohan/venv_py3/lib/python3.4/site-packages/sunburnt/__init__.py in <module>()
  1 from __future__ import absolute_import
  2 
----> 3 from .strings import RawString
  4 from .sunburnt import SolrError, SolrInterface
  5 

/Users/rmohan/venv_py3/lib/python3.4/site-packages/sunburnt/strings.py in <module>()
  2 
  3 
----> 4 class SolrString(unicode):
  5     # The behaviour below is only really relevant for String fields rather
  6     # than Text fields - most queryparsers will strip these characters out

NameError: name 'unicode' is not defined

そこで、次のように pysolr で同じドキュメントを試しました。

import pysolr
solr = pysolr.Solr('http://localhost:8983/solr/', timeout=10)

document = [{"id":"0553573403",
        "cat":"book",
        "name":"A Game of Thrones",
        "price":7.99,
        "inStock": True,
        "author_t":
        "George R.R. Martin",
        "series_t":"A Song of Ice and Fire",
        "sequence_i":1,
        "genre_s":"fantasy"}]

solr.add(document)

以下を与える:

/Users/rmohan/venv_py3/lib/python3.4/site-packages/pysolr.py in _scrape_response(self, headers, response)
443         dom_tree = None
444 
--> 445         if response.startswith('<?xml'):
446             # Try a strict XML parse
447             try:

TypeError: startswith first arg must be bytes or a tuple of bytes, not str

私はいくつかのグーグルを行いましたが、ユニコードまたは入力のバイト問題を解決する方法について決定的な答えを見つけることができませんでした。文字列をバイトとユニコードの両方に変換しようとしましたが、何も機能していないようです。

SOLR にドキュメントを挿入するより良い方法を誰かが知っている場合は、共有してください。どんな助けでも大歓迎です。

4

1 に答える 1

1

私はそれを理解しました、ファイルpysolr.pyには

if response.startswith('<?xml'):

に変更する必要がありました

if response.startswith(b'<?xml'):

詳細については、https ://github.com/toastdriven/pysolr/issues/159 を参照してください。

于 2015-10-16T18:20:19.297 に答える