SolrInputDocument/tika Извлечение медленно для индексации многих документов
Я использую Solr 4.5. Я пытаюсь перебрать несколько файлов HTML, чтобы извлечь данные из файла, используя Apache Tika 1.4. Затем добавьте эти поля метаданных в SolrInputDocument. Каждый раз мне приходится зацикливать файл и создавать экземпляр SolrInputDocument. Индексирование кажется очень медленным, и у нас есть огромное количество файлов для индексации. Мне нужен совет экспертов здесь. Это пример кода, который я использую.
String urlString = "http://server/solr/";
SolrServer solr = new HttpSolrServer(urlString);
UpdateRequest updrequest = new UpdateRequest("/update");
//For tika extraction initialisation
BodyContentHandler handler = new BodyContentHandler(10 * 1024 * 1024);
AutoDetectParser autoparser = new AutoDetectParser();
Metadata metadata = new Metadata();
ParseContext parseContext = new ParseContext();
Затем для каждого html-файла я вызываю метод извлечения Tika ExtractData, который я написал, и передаю каждый объект, который я инициализировал здесь, вместе с моим файлом:
ExtractData(file,solr,updrequest,handler,autoparser,metadata,parseContext);
Код для ExtractData показан ниже
public void ExtractData(String file,SolrServer solr,UpdateRequest updrequest,BodyContentHandler handler,AutoDetectParser autoparser,Metadata metadata,ParseContext parseContext) throws IOException,
SAXException, TikaException, SolrServerException {
SolrInputDocument solrinputdocument = new SolrInputDocument();
metadata.set(Metadata.CONTENT_TYPE, "text/html");
autoparser.parse(input, handler, metadata, parseContext);
//loop all metadata from the extraction and add the fields to the solr
String[] metadataNames = metadata.names();
for (String name : metadataNames) {
solrinputdocument.addField(name, metadata.get(name));
}
}
updrequest.add(solrinputdocument);
solr.request(updrequest);
}
2 ответа
Как говорит Чеффе, в настоящее время нельзя использовать несколько потоков с DIH (в прошлом была возможность сделать это, но это было ошибкой и было удалено). Итак, ваш лучший выбор:
- делать извлечение с тика в своей собственной клиентской программе
- используйте SolrJ API для отправки в Solr
- Вы делаете это в несколько потоков, настраивайте число, пока не увидите лучший сценарий. Также настройте обычную конфигурацию lucene/solr для индексации throuput (remBufferSizeMB и т. Д.)
Попробуйте заменить AutoDetectParser на явный HtmlParser. Недавно я обнаружил, что процесс автоопределения может быть очень медленным, казалось бы, загрузка файлов несколько раз.