Объединение файлов SolR DIH

Я хочу использовать обработчик SolR DataImport для индексации кандидатов, хранящихся в базе данных, вместе с содержимым файлов, связанных с этими кандидатами.

У меня есть одна таблица базы данных, содержащая список кандидатов, и другая таблица, содержащая список путей к файлам, связанных с кандидатом.

Что мне нужно, так это:

  1. проиндексировать данные-кандидаты - довольно просто...
  2. прокрутить список файлов - Мне тоже удалось это сделать...
  3. извлеките содержимое файла (в формате pdf, doc, xml, html и т. д.). Эта часть выполнена
  4. сгруппировать содержимое всех файлов в одном поле содержимого для индексации

Это на самом деле, где я застрял! Я пробовал разные варианты, но система индексирует только содержимое первого файла. Я пробовал играть с глобальной переменной javascript, хотя такая работа не кажется лучшим решением...

Найдите в дальнейшем мой файл dih.xml:

    <?xml version="1.0" encoding="UTF-8" ?>
    <dataConfig>
     <script><![CDATA[
      var globalContent = '';

      function processFile(row) {
        var text = row.get('text');
        if (text == null) text = '';
        else globalContent += ' ' + text;

        row.remove('text');
        row.remove('content');

        row.put('content', globalContent);
        return row;
      }
     ]]></script>

     <dataSource type="JdbcDataSource"    name="dbs" driver="com.mysql.jdbc.Driver"         url="jdbc:mysql://localhost:3306/dbname" user="login" password="password" />
     <dataSource type="BinFileDataSource" name="fds" /> 

     <document name="ListOfCandidates">
      <entity name="candidats" datasource="dbs" query="select * from candidates">
       <field column="id_candidat" name="id_candidat" />
       <field column="name"        name="lastname"    />
       <field column="first_name"  name="firstname"   />

       <entity name="ListOfFiles" 
               query="SELECT distinct cd.id_document, cd.filepath 
                  FROM candidat_document cd
                  WHERE cd.id_candidat = '${candidats.id_candidat}'">
        <entity name="file" 
                processor="TikaEntityProcessor" 
                url="/some/folder/${ListOfFiles.filepath}" 
                dataSource="fds" 
                format="text" 
                onError="skip"
                transformer="script:processFile">
          <field column="text" name="text" />
        </entity>                   
       </entity>
      </entity>
     </document>

Любая помощь приветствуется!


person Ghoz    schedule 12.07.2013    source источник


Ответы (1)


Ваш объект row содержит всю информацию, собранную в результате отдельных записей кандидатов. Вы пытались просто заполнить специальное поле внутри этой строки, в которой накапливается текст.

Итак, именно то, что вы делаете, но сохраните его в row вместо глобальной переменной.

person Alexandre Rafalovitch    schedule 14.07.2013