我有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 } ] } }
我究竟做错了什么?