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 (в прошлом была возможность сделать это, но это было ошибкой и было удалено). Итак, ваш лучший выбор:

  1. делать извлечение с тика в своей собственной клиентской программе
  2. используйте SolrJ API для отправки в Solr
  3. Вы делаете это в несколько потоков, настраивайте число, пока не увидите лучший сценарий. Также настройте обычную конфигурацию lucene/solr для индексации throuput (remBufferSizeMB и т. Д.)

Попробуйте заменить AutoDetectParser на явный HtmlParser. Недавно я обнаружил, что процесс автоопределения может быть очень медленным, казалось бы, загрузка файлов несколько раз.

Другие вопросы по тегам