pySolr:添加多值字段

时间:2017-12-16 11:15:57

标签: python pandas solr pysolr

我想从pandas数据帧填充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)

我收到以下错误:

  

非multiValued字段位置遇到多个值

如果我将匹配的位置的名称更改为 _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]

#...

尽管有这种“hackish”解决方案,我仍然没有得到一个好结果:每个元素都是一个列表。我会更喜欢位置的元组,以及的简单浮点数。我想这是在转换为json时来自 orient 关键字。

问题和预期输出

首先,我想避免将位置重命名为 _position 。为了pysolr,Solr数据库不必包含重命名的字段。

其次,我希望在从构建的Solr索引中读取时避免使用列表。我知道Solr不必包含列表作为数字元素。问题似乎来自于从DataFrame到json的转换。怎么做?

0 个答案:

没有答案