当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《Solr不会覆盖-重复的uniqueKey条目》经验,为你挑选了0个好方法。

我有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);
server.commit();

我总是再次为所有孩子添加一份完整的文档.它没什么特别的花哨.我最终得到了相同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();

搜索:

http://192.168.56.102:8983/solr/test1/select?q= %3A&重量= JSON&缩进=真

导致以下输出:

{

  "responseHeader": {
    "status": 0,
    "QTime": 0,
    "params": {
      "q": "*:*",
      "indent": "true",
      "wt": "json",
      "_": "1450078098465"
    }
  },
  "response": {
    "numFound": 3,
    "start": 0,
    "docs": [
      {
        "id": "1",
        "content_type_s": "doc_unfinished",
        "_version_": 1520517084715417600
      },
      {
        "id": "1-1",
        "content_type_s": "subdoc"
      },
      {
        "id": "1",
        "content_type_s": "doc",
        "_version_": 1520517084838101000
      }
    ]
  }
}

我究竟做错了什么?

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有