小编tom*_*m_w的帖子

Solr不会覆盖 - 重复的uniqueKey条目

我有Solr 5.3.1的问题.我的架构很简单.我有一个uniqueKey,它是作为字符串的"id".索引,存储和必需,非多值.

我首先使用"content_type:document_unfinished"添加文档,然后使用相同的id但另一个content_type:document 覆盖相同的文档.然后该文档在索引中两次.同样,唯一的uniqueKey是"id",作为字符串.id最初来自mysql-index primary int.

看起来这不仅发生一次:

http://lucene.472066.n3.nabble.com/uniqueKey-not-enforced-td4015086.html

http://lucene.472066.n3.nabble.com/Duplicate-Unique-Key-td4129651.html

在我的情况下,并非索引中的所有文档都是重复的,只有一些.我假设 - 最初 - 当索引中存在相同的uniqueKey时,它们会在提交时被覆盖.这似乎不像我预期的那样工作.我不想简单地更新文档中的某些字段,我想完全替换它,与所有孩子一起.

一些统计数据:索引中约有350,000个文档.主要是与childDocuments.文档由"content_type"字段区分.我使用SolrJ以这种方式导入它们:

HttpSolrServer server = new HttpSolrServer(url);
server.add(a Collection<SolrInputDocument>);
server.commit();
Run Code Online (Sandbox Code Playgroud)

我总是再次为所有孩子添加一份完整的文档.它没什么特别的花哨.我最终得到了相同uniqueKey的重复文档.没有侧面注射.我只使用集成的Jetty运行Solr.我没有在java"手动"中打开lucene索引.

我当时做的是再次删除+插入.这似乎工作了一段时间,但在某些情况下开始给出此错误消息:

父查询生成与父项筛选器不匹配的文档

发生这种情况的文档似乎是完全随机的,似乎只有一件事情出现:它是一个发生它的childDocument.我没有运行任何特殊的东西,基本上从网站上下载了solr包并运行它bin/solr start

任何想法?

编辑1

我想我发现了问题,这似乎是个错误?要重现此问题:

我在一个virtualBox中将Solr 5.3.1下载到了Debian并启动了它bin/solr start.添加了具有基本配置集的新核心.基本配置集没有任何改变,只是将其复制并添加了核心.

这导致索引中具有相同id的两个文档:

    SolrClient solrClient = new HttpSolrClient("http://192.168.56.102:8983/solr/test1");
    SolrInputDocument inputDocument = new SolrInputDocument();
    inputDocument.setField("id", "1");
    inputDocument.setField("content_type_s", "doc_unfinished");
    solrClient.add(inputDocument);
    solrClient.commit();
    solrClient.close();

    solrClient = new HttpSolrClient("http://192.168.56.102:8983/solr/test1");
    inputDocument = new SolrInputDocument();
    inputDocument.setField("id", "1");
    inputDocument.setField("content_type_s", "doc");
    SolrInputDocument childDocument = new SolrInputDocument();
    childDocument.setField("id","1-1");
    childDocument.setField("content_type_s", "subdoc");
    inputDocument.addChildDocument(childDocument);
    solrClient.add(inputDocument);
    solrClient.commit();
    solrClient.close(); …
Run Code Online (Sandbox Code Playgroud)

java lucene solr solrj

7
推荐指数
1
解决办法
2486
查看次数

标签 统计

java ×1

lucene ×1

solr ×1

solrj ×1