2013-03-01 4 views
0

Я настроил dih-import.xml, как показано ниже. FileListEntityProcessor просматривает некоторые папки, а затем запускает XPathEntity и DB-Entity для каждого файла.Solr: FileListEntityProcessor выполняет вспомогательные объекты несколько раз

Когда я выполнил полный импорт для ~ 30.000 файлов, импорт занял почти 3 часа. Вернувшись к консоли DIH-debug, он показал мне, что для первого найденного файла было сделано 2 db-звонка, для 2-го 4, 6, 8, ...

google ничего мне не показывал эта тема, поэтому я надеюсь, для вас :)

заранее спасибо

<?xml version="1.0" encoding="UTF-8"?> 
<dataConfig> 
    <dataSource 
     name="cr-db" 
     jndiName="xyz" 
     type="JdbcDataSource" /> 
    <dataSource 
     name="cr-xml" 
     type="FileDataSource" 
     encoding="utf-8" /> 


    <document name="doc"> 
     <entity 
      dataSource="cr-xml" 
      name="f" 
      processor="FileListEntityProcessor" 
      baseDir="/path/to/xml" 
      filename="*.xml" 
      recursive="true" 
      rootEntity="true" 
      onError="skip"> 
      <entity 
       name="xml-data" 
       dataSource="cr-xml" 
       processor="XPathEntityProcessor" 
       forEach="/root" 
       url="${f.fileAbsolutePath}" 
       transformer="DateFormatTransformer" 
       onError="skip"> 
       <field column="id" xpath="/root/id" /> 

       <field column="A" xpath="/root/a" /> 
      </entity> 

      <entity 
       name="db-data" 
       dataSource="cr-db" 
       query=" 
        SELECT 
         id, b 
        FROM 
         a_table 
        WHERE 
         id = '${f.file}'"> 
       <field column="B" name="b" /> 
      </entity> 
     </entity> 
    </document> 
</dataConfig> 

EDIT нашел проблему в гугле, но ответа там либо: http://osdir.com/ml/solr-user.lucene.apache.org/2010-04/msg00138.html


и другой редактировать

обновленный Solr от 3,6 до 4,1 и казнили импортера. Проблема все еще существует, но только 2n (2, 4, 6, 8, ..) вызовы для субингументов больше, но только n.

+0

Просто уточнение? Вы пытаетесь сделать один документ Solr для каждого файла? Что означало бы, что у вас есть только одна/корневая запись? Это верно? –

+0

Это правильно. Один документ Solr должен содержать 'id',' A' и 'B', который работает как ожидалось, просто не в нужное время и с возможностью большой нагрузки на db – harpax

ответ

1

Если основной проблемой является количество обращений к базе данных при использовании JdbcDataSource, вы можете попробовать перейти на CachedSqlEntityProcessor.

Вы также можете отслеживать SOLR-2943, как они хотят, чтобы решить именно вашу проблему, мы надеемся, для предстоящего Solr 4.2

+0

Спасибо за ваш ответ. Подобно тому, который я получил здесь: http://lucene.472066.n3.nabble.com/solr-dih-does-multiple-queries-for-sub-entities-tt4044522.html. Однако это не решение, так как для каждого файла есть 1 db-entry (1: 1), поэтому нет ничего, что можно было бы кэшировать. Один процессор (я считаю, что это FileListEntity) просто слишком много вызовов: (n * (n + 1))/2 – harpax

+0

То же самое происходит с файлами, которые передаются по xpathed. Они называются n раз, где n является позицией в возвращаемом наборе FileListEntityProcessor – harpax

+0

. Я заметил, что вы используете * cr-xml * dataSource как для внешних, так и для внутренних объектов. Можете ли вы проверить, что произойдет, если у вас есть два разных источника данных. Возможно, что источник данных повторно инициализируется во внутренней сущности и каким-то образом нарушает цикл внешнего объекта. Просто удвойте определение dataSource и дайте им разные имена. –

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

  • Нет связанных вопросов^_^