具有相同唯一键的重复文档

时间:2013-05-24 07:22:27

标签: java solr

对于特定的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语句的行为。

2 个答案:

答案 0 :(得分:3)

此行为是由于使用overwrite = false。您明确要求您所看到的行为。

此处记录了这些内容:https://cwiki.apache.org/confluence/display/solr/Uploading+Data+with+Index+Handlers#UploadingDatawithIndexHandlers-JSONFormattedIndexUpdates

“指示是否应检查唯一键约束以覆盖同一文档的先前版本”

因此,如果overwrite为“true”,请检查是否覆盖现有文档并删除它(如果存在现有文档)。如果overwrite为false,请不要检查,只是假设此文档是唯一的,只需添加新文档即可。

如果参数被命名为“overwriteCheck”,这将更加清晰,因为它确实是它的作用。

答案 1 :(得分:0)

请参阅可在更新处理程序上配置的Solr Document Deduplication Detection,以便为您正确处理此方案。