我目前正在尝试使用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命令创建的索引的文档。
我希望我足够清楚,也许我误解了它的运作方式......
非常感谢
答案 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