4

对于特定的 Solr 应用程序,我需要丢弃重复的结果。我有一个字段id设置为 schema.xml 中的唯一键,如下所示:

<uniqueKey>id</uniqueKey>

当我/update/json?commit=true使用现有文档的 id 调用时,现有文档会正确更新。但是,当我打电话时,/update/json?commit=true&overwrite=false会添加一个具有相同 ID 的附加文档!如何配置 Solr 以丢弃具有现有文档 ID 的文档?我注意到allowDups属性已贬值,因此我不想将其引入运行 Solr 4.x 的新代码中。在任何情况下,默认值是false这样我不明白为什么要添加欺骗。

如果重要,该id字段定义如下:

<field name="id" type="string" stored="true" indexed="true" multiValued="false" required="true"/>

需要明确的是,我不想更新,也不想创建新文档。我想丢弃新文档。id字段被计算为其他几个字段内容的哈希值。因此,如果另一个具有相同哈希 (id) 的字段已经存在,我不想更新它(我需要始终保留相同哈希的最旧文档)并且我不想创建新记录(重复)。我只是想丢弃新文档。

我正在寻找类似于INSERT IGNORE INTOSQL 语句的行为。

4

2 回答 2

4

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

这记录在这里:https ://cwiki.apache.org/confluence/display/solr/Uploading+Data+with+Index+Handlers#UploadingDatawithIndexHandlers-JSONFormattedIndexUpdates

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

因此,如果 overwrite 为“true”,请检查这是否覆盖了现有文档,如果存在现有文档,则将其删除。如果 overwrite 为 false,则不检查,假设此文档是唯一的,然后添加新文档。

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

于 2016-06-22T16:44:14.993 回答
0

请参阅可在更新处理程序上配置的Solr 文档重复数据删除检测,以便为您正确处理此场景。

于 2013-05-24T12:08:43.357 回答