2010-09-07 1 views
2

Я использую SolrNet для интрансформации с индексом Solr. У меня есть приложение-демона, записывающее в индекс Solr с добавлением/обновлением/удалением. Однако с SolrNet a Add с тем же уникальным ключом переписывает (заменяет) существующий документ, а не добавляет (объединяет) их.SolrNet/Solr - Обновление по сравнению с документом Overwrite

В Lucene я мог бы сделать что-то вроде этого, где термин - термин Lucene для ключа документа. Как я могу сделать это в SolrNet? Я знаю о (болезненном) способе добавления поля за полем в методе, но, конечно, там должен быть более простым способом ...

//where term is a Lucene term for the document key 
if (objFacetsSearcher.DocFreq(term) > 0) 
{ 
    objWriter.UpdateDocument(term, doc); 
    updated++; 
} 
else 
{ 
    objWriter.AddDocument(doc); 
    added++; 
} 
+0

Возможный дубликат [Обновить специальное поле в индексе SOLR] (http://stackoverflow.com/questions/2032813/update-specific-field-on-solr-index) –

+0

@Mauricio - не думайте, что это связано на мой вопрос. – Mikos

+2

это точно так же. В Solr вы не можете обновлять отдельные поля. –

ответ

1

Насколько я знаю, это не поддерживается Солр еще. См. SOLR-139.

+0

По сути, единственный способ - прочитать документ назад, добавить материал и написать обратно? Это похоже на ввод-вывод - вредно для здоровья. Какие подходы вы предпринимаете, чтобы обойти это? – Mikos

+0

Я думал о том, чтобы использовать Lucene для прямого обращения к индексу Solr. Любые недостатки, о которых нужно знать? – Mikos

+0

@mikOS в зависимости от ограничений среды, самым очевидным способом было бы снова прочитать весь документ из исходной системы. Если это не жизнеспособный вариант, рассмотрите либо реализацию функций кеширования в своем соединителе (или как часть обработки вашего документа), либо введите поля ввода, хранящиеся в вашем индексе, и прочитайте документ из Solr, чтобы заполнить любые поля за пределами дельта. –