2014-01-07 4 views
0

Iam пытается индексировать документы в solrj. iam, используя Solr4.5, и у меня есть огромные файлы для индексирования. каковы способы индексирования каждого файла, чтобы избежать узких мест в производительности.Добавление огромного количества файлов в Solr

+0

Как долго мы говорим? Вам нужно только индексировать эти файлы один раз. –

+0

@Bartlomiej Lewandowski: его индексирование 35 000 записей за 1 час. Таким образом, итоговые записи 700 000 записей я должен ждать отдыха. . Да, я должен индексировать эти файлы один раз. Но iam вызывает запрос solr update для каждого файла. – user3161879

ответ

0

Первое, что нужно проверить, является журнал на стороне сервера и искать сообщения о фиксаций. Возможно, вы выполняете жесткую фиксацию после разбора каждого файла. Это дорого. Вы можете изучить мягкие коммиты или commitWithin params, чтобы файлы отображались чуть позже.

Во-вторых, вы, кажется, отправляете запрос на Solr для извлечения вашего файла и запускаете его на Tika. Таким образом, это, вероятно, перезапускает Tika внутри Solr каждый раз. Вы не сможете делать это, как могут показаться другие ответы.

Но вы можете запустить Tika локально в своем клиенте и инициализировать его один раз и сохранить его. Тогда это дает больше гибкости в том, как создать свой SolrInputDocument, который вы затем можете выполнить.

+0

как побегать tike экстракт внешне. Я думал, что solrj заботится об этом. – user3161879

+0

Если я правильно понимаю ваш код, вы отправляете этот запрос для извлечения обработчика. Это означает, что сервер Solr * работает под управлением Tika. Вместо этого вы можете просто создать экземпляр Tika в своем Java-процессе и запустить его самостоятельно. Вы потеряете некоторые функции отображения полей Solr, но я подозреваю, что вы еще не используете его. –

+0

Да, попробуй свое предложение и проверьте. Но еще одна вещь, когда iam пытается индексировать несколько документов один за другим, он индексирует 100 000 записей успешно, а затем сохраняет файлы, которые он запускает, говоря Server по адресу http: // имя_сервера/solr/возвращенный статус не в порядке: 500, сообщение: Внутренняя ошибка сервера. Что может быть причиной? – user3161879

0

Обновление для каждого документа происходит медленно с помощью solr.

Вы намного лучше добавили все документы, а затем совершили фиксацию с обновлением. Взятые из Solr вики:

Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>(); 
docs.add(doc1); 
docs.add(doc2); 

UpdateRequest req = new UpdateRequest(); 
req.setAction(UpdateRequest.ACTION.COMMIT, false, false); 
req.add(docs); 
UpdateResponse rsp = req.process(server); 
+0

Iam, получая каждый документ, который нужно индексировать, от разбора другого файла по строкам. Поэтому у меня нет коллекции документов как таковых. У меня есть один файл за раз. Так я должен добавлять файлы в эту коллекцию каждый цикл i? а затем вызвать этот запрос на обновление для этой коллекции? – user3161879

+0

@ user3161879 Да, добавьте их в коллекцию, и когда вы закончите, сделайте запрос на обновление с помощью коллекции. –

+0

Я изменил код и iam передал документ коллекции на сервер solr. Но в каждом документе внутри явно установлен идентификатор. Но solr бросает мне исключение, поскольку в документе отсутствует обязательное уникальное поле Key: id. что еще нужно сделать. – user3161879

Смежные вопросы