我的Solr 4架构中有以下字段
<field name="id" type="string" indexed="true" stored="true" required="true" />
<dynamicField name="rank_*" type="int" indexed="true" stored="true" />
我可以使用下面的内容进行原子更新,这样可以很好地保留其他字段
{"add":{"doc":{"id":"111","rank_350":{"set":"1"},"rank_391":{"set":"4"}}},
"add":{"doc":{"id":"222","rank_350":{"set":"1"},"rank_391":{"set":"4"}}}}
现在我想清除任何现有的排名,然后再用新的排名进行更新,而不必先查询它们是什么。如果我使用上面的方法并且只使用新的等级,旧的两个将保留在那里,因为更新是原子的。
我尝试在一个帖子中使用通配符或使用其他更新,但solr认为有一个名为rank_ *的字段,而不是将null设置应用于所有等级。
{"add":{"doc":{"id":"111","rank_*":{"set":"null"}}}
如何将更新应用于所有rank_ *动态字段?
原因是我不想首先查询以查看之前的内容,因为我将一次批量更新到200(这可以在一个帖子中完成)。如果我不得不查询201个帖子而不是1个帖子,或者更改我的活动以了解删除的内容也很困难。
答案 0 :(得分:2)
我知道,Solr中唯一支持通配符的与字段相关的功能是fl参数,dynamicField和copyField。包括所有形式的索引的其他任何内容一次只能引用一个字段。据我所知,没有办法完全按照您的意愿去做。