我想从熊猫数据框中填充一个 solr 索引。数据框如下:
position value
5.6,-2.3 65
-35.6,-1.2 43.1
#...
等等
我正在执行以下操作将数据框转换为 json 对象,然后将其添加到 solr:
import json
import pandas as pd
import pysolr
# I have a pandas dataframe df as described above
jsonObject = json.loads(df.to_json(orient='records'))
solrServer = pysolr.Solr('pathToMySolrIndex',timeout=100)
solrServer.add(jsonObject)
我收到以下错误:
非多值字段位置遇到多个值
如果我将 fied职位的名称更改为_position,那么它会起作用。从 pysolr 的文档页面,我了解到这会创建一个我并不真正想要的父/子依赖项。实际上,使用以下方法从索引中读取:
results = solrServer.search(**{'q':'*'})
df2 = pd.DataFrame(list(results))
print(df2.head())
我得到这样的东西:
_position value
[5.6,-2.3] [65]
[-35.6,-1.2] [43.1]
#...
尽管有这种“骇人听闻”的解决方案,但我仍然没有得到好的结果:每个元素都是一个列表。我会更喜欢 tuples 的position和简单的 float 的value。我猜这来自转换为 json 时的orient关键字。
问题和预期输出
首先,我想避免将position重命名为_position。为了 pysolr,Solr 数据库不必包含重命名的字段。
其次,我想在从构建的 Solr 索引中读取时避免使用列表。我知道 Solr 不必包含列表作为数字元素。问题似乎来自从 DataFrame 到 json 的转换。这个怎么做?