Saving data into solr with pysolr get rejected 'AttributeError: 'str' object has no attribute 'items''

Saving data into solr with pysolr get rejected 'AttributeError: 'str' object has no attribute 'items''

我正在使用 pysolr 将 类 列表保存到我的本地 solr 数据库中,我的问题是当我使用 jsonpickle 对 类 列表进行编码时,查询被此消息拒绝,尽管如果我打印由 josnpickle 生成的 json,我将数据保存到 solr 中没有问题。

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-2-3b6d9f42d0ec> in <module>()
     27 json=str(jsonpickle.encode(coreData, unpicklable=False))
     28 print(json)
---> 29 solr.add(json)

    C:\ProgramData\Anaconda3\lib\site-packages\pysolr.py in add(self, docs, boost, fieldUpdates, commit, softCommit, commitWithin, waitFlush, waitSearcher, overwrite, handler)
        878 
        879         for doc in docs:
    --> 880             el = self._build_doc(doc, boost=boost, fieldUpdates=fieldUpdates)
        881             message.append(el)
        882 

    C:\ProgramData\Anaconda3\lib\site-packages\pysolr.py in _build_doc(self, doc, boost, fieldUpdates)
        798         doc_elem = ElementTree.Element('doc')
        799 
    --> 800         for key, value in doc.items():
        801             if key == NESTED_DOC_KEY:
        802                 for child in value:

    AttributeError: 'str' object has no attribute 'items'

我的代码:

from solrq import Q
import pysolr
import jsonpickle
from datetime import datetime, timedelta
from Model import Twitter



#conexion a solr
solr = pysolr.Solr('http://localhost:8983/solr/twitter')

#query
query = Q(label="none")
results = solr.search(query)


print("Saw {0} result(s).".format(len(results)))

#testing the query
for result in results:
    print("-->".format(result['content']))

#creating a new class with data    
twit = Twitter("000002","content text","some label")  
#list of twitter classes
coreData=[]

coreData.append(twit)
#encoding to json
json=str(jsonpickle.encode(coreData, unpicklable=False))

print(json)
#saving to solr
solr.add(json)

这是将 类 的列表编码为 json [{"content": "content text", "id": "000002", "label": "some label"}] 后打印的内容 正如我之前所说,如果我用此字符串替换 json 变量,数据将被保存,但我不知道为什么,即使转换为这样的字符串 solr.add(str(json)) 也会得到相同的错误消息。

这里的问题是,方法 add

pysolr

Requires docs, which is a list of dictionaries. Each key is the field name and each value is the value to index.

您需要从您的对象而不是字符串创建字典。您可以通过在对象

上调用 vars 来实现
coreData=[]
coreData.append(vars(twit))
solr.add(coreData)