对于特定的Solr应用程序,我需要丢弃重复的结果。我将一个字段id
设置为schema.xml中的唯一键,如下所示:
<uniqueKey>id</uniqueKey>
当我使用现有文档的ID调用/update/json?commit=true
时,现有文档已正确更新。但是,当我拨打/update/json?commit=true&overwrite=false
时,会添加一个具有相同ID的附加文档! 如何配置Solr以丢弃具有现有文档ID的文档?我注意到the allowDups
attribute is depreciated,因此我不想将其引入运行Solr 4.x的新代码中。在任何情况下,默认值为false
,所以我不明白为什么要添加欺骗。
如果重要,id
字段定义如下:
<field name="id" type="string" stored="true" indexed="true" multiValued="false" required="true"/>
要明确,我不想更新,我也不想创建新文档。 我想丢弃新文档。 id
字段计算为其他几个字段内容的哈希值。因此,如果已经存在具有相同散列(id)的另一个字段,那么我不想要更新它(我需要始终保留相同散列的最旧文档)并且我不< / em>想要创建一个新记录(欺骗)。我只想丢弃新的文档。
我正在寻找类似于INSERT IGNORE INTO
SQL语句的行为。
答案 0 :(得分:3)
此行为是由于使用overwrite = false。您明确要求您所看到的行为。
“指示是否应检查唯一键约束以覆盖同一文档的先前版本”
因此,如果overwrite为“true”,请检查是否覆盖现有文档并删除它(如果存在现有文档)。如果overwrite为false,请不要检查,只是假设此文档是唯一的,只需添加新文档即可。
如果参数被命名为“overwriteCheck”,这将更加清晰,因为它确实是它的作用。
答案 1 :(得分:0)
请参阅可在更新处理程序上配置的Solr Document Deduplication Detection,以便为您正确处理此方案。