Solr не перезаписывает - дублируются записи uniqueKey
У меня проблема с Solr 5.3.1. Моя схема довольно проста. У меня есть один uniqueKey, который является «id» в виде строки. индексируется, хранится и требуется, не многозначно.
Сначала я добавляю документы с «content_type: document_unfinished», а затемзатирать тот же документ, с тем же идентификатором, но с другим типом содержимого: документ. Документ затем дважды в индексе. Опять же, единственным uniqueKey является "id", как строка. Идентификатор исходит из первичного объекта mysql-index.
Также похоже, что это происходит не единожды:
http://lucene.472066.n3.nabble.com/uniqueKey-not-enforced-td4015086.html
http://lucene.472066.n3.nabble.com/Duplicate-Unique-Key-td4129651.html
В моем случае не все документы в индексе дублируются, только некоторые. Сначала я предполагал, что они перезаписываются при фиксации, когда в индексе существует один и тот же uniqueKey. Который, кажется, не работает, как я ожидал. Я не хочу просто обновлять некоторые поля в документе, я хочу полностью заменить его всеми дочерними элементами.
Немного статистики: около 350 тыс. Документов в индексе. В основном с childDocuments. Документы выделяются полем «content_type». Я использовал SolrJ, чтобы импортировать их таким образом:
HttpSolrServer server = new HttpSolrServer(url);
server.add(a Collection<SolrInputDocument>);
server.commit();
Я всегда добавляю целый документ со всеми детьми снова. Ничего особенного. Я получаю дубликаты документов для того же уникального ключа. Там нет боковых инъекций. Я запускаю только Solr с интегрированной Jetty. Я не открываю индекс lucene в Java "вручную".
Затем я удалил + вставил снова. Это, казалось, работало некоторое время, но затем началось при некоторых условиях и выдает следующее сообщение об ошибке:
Родительский запрос дает документ, который не соответствует родительскому фильтру
Документ, где это происходит, кажется совершенно случайным, кажется, появляется только одна вещь: это childDocument, где это происходит. Я ничего особенного не запускаю, в основном скачал с сайта пакет solr и запускаю его сbin/solr start
У кого-нибудь есть идеи?
РЕДАКТИРОВАТЬ 1
Я думаю, что нашел проблему, которая, кажется, ошибка? Чтобы воспроизвести проблему:
Я скачал Solr 5.3.1 в Debian в virtualBox и начал его сbin/solr start
, Добавлено новое ядро с базовым набором настроек. Ничего не изменилось в базовом наборе настроек, просто скопировал его и добавил ядро.
Это приводит к двум документам с одинаковым идентификатором в индексе:
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
}
]
}
}
Что я делаю неправильно?