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)
我正在使用 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
的 pysolrRequires
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)