SolrClient python更新文档

时间:2017-02-07 14:41:21

标签: python solr

我目前正在尝试使用SolrClient创建一个小型python程序来索引某些文件。

我需要的是,我想索引一些文件内容,然后添加一些属性来丰富文档。 我使用post命令行工具索引文件。然后我使用python程序尝试丰富文档,如下所示:

doc = solr.get('collection', id)
doc['new_attribute'] = 'value'
solr.index_json('collection',json.dumps([doc]))
solr.commit(openSearcher=True)

问题是我感觉我们丢失了文件内容索引。如果我运行一个查询,其中包含文档的所有属性中的单词,我会找到它。

如果我只在文件中运行一个带有单词的查询,它就不起作用(它仅对没有我的更新暂定的帖子进行索引)。

我不确定如何更新保存post命令创建的索引的文档。

我希望我足够清楚,也许我误解了它的运作方式......

非常感谢

3 个答案:

答案 0 :(得分:0)

如果我理解正确,您想要修改现有记录。你应该可以在不使用solr.get的情况下做这样的事情:

doc = [{'id': 'value', 'new_attribute':{'set': 'value'}}]
solr.index_json('collection',json.dumps([doc]))

另见: https://cwiki.apache.org/confluence/display/solr/Updating+Parts+of+Documents

答案 1 :(得分:0)

尝试使用Curl并没有改变任何东西。我做的不同,所以现在它的工作原理。我没有使用post命令添加文件并在之后尝试修改它,而是在字符串中读取文件并在“内容”字段中编制索引。这意味着每一个文档都是一次性添加的。

内容字段定义为未存储,因此我只是将其编入索引。

它工作正常,适合我的需要。它也更简单,因为它删除了我不需要的post命令设置的许多属性。

如果我找到一些时间,我会再次尝试部分更新并更新帖子。

由于 雷米

答案 2 :(得分:0)

这种方式对我有用,对某人可能有用

>>> z
     0.00 0.25 0.50 0.75 4.00
0.00  NaN  NaN  NaN  NaN  NaN
0.25  NaN  NaN  NaN  NaN  NaN
0.50  NaN  NaN  NaN  NaN  NaN
0.75  NaN  NaN  NaN  NaN  NaN
4.00  NaN  NaN  NaN  NaN  NaN
>>> def cross_mul(x):
...     return x.index * x.name
... 
>>> z.apply(cross_mul)
      0.00    0.25   0.50    0.75  4.00
0.00   0.0  0.0000  0.000  0.0000   0.0
0.25   0.0  0.0625  0.125  0.1875   1.0
0.50   0.0  0.1250  0.250  0.3750   2.0
0.75   0.0  0.1875  0.375  0.5625   3.0
4.00   0.0  1.0000  2.000  3.0000  16.0
>>> z.apply(lambda x: x.index * x.name) // One Liner