1

我的 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 个,或者更改我的事件以了解已删除的内容,这也很困难。

4

1 回答 1

2

据我所知,Solr 中唯一支持通配符的字段相关功能是 fl 参数、dynamicField 和 copyField。其他任何东西,包括所有形式的索引,一次只能引用一个字段。据我所知,没有办法完全按照您的要求去做。

于 2019-10-23T23:15:24.333 回答