1

我正在使用 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))得到相同的错误消息。

4

1 回答 1

1

这里的问题是,用于方法添加的pysolr

Requires docs,它是一个字典列表。每个键是字段名称,每个值是要索引的值。

您需要从对象创建字典,而不是字符串。你可以通过调用vars一个对象来做到这一点

coreData=[]
coreData.append(vars(twit))
solr.add(coreData)
于 2017-12-15T09:09:51.367 回答