2013-07-12 2 views
0

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

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

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

  1. индекс кандидат данных - довольно легко ...
  2. петля по списку файлов - мне удалось это сделать, а также ...
  3. извлечь содержимое файла (будучи PDF, DOC, XML, HTML, и т.д ... - Эта часть делается
  4. группу содержимого ll в одном поле для индексации

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

Найти далее мой 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> 

Любая помощь будет очень признателен!

ответ

0

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

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

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