DataImportHandler не сообщает об ошибке, но не завершается

Я пытаюсь убедить solr выполнить массовый импорт базы данных sqlite. Я настроил DataImportHandler для успешного открытия этой базы данных через jdbc, и я могу начать импорт с помощью wget http://localhost:8080/solr/dataimport?command=full-import, но что бы я ни делал, solr индексирует только первые 499 документов (как сообщает wget http://localhost:8080/solr/dataimport?command=status).

Файл журнала причала не сообщает об ошибках. Вместо этого он сообщает об окончании индексации:

27-Jan-2012 19:08:13 org.apache.solr.handler.dataimport.SolrWriter readIndexerProperties
INFO: Read dataimport.properties
27-Jan-2012 19:08:13 org.apache.solr.handler.dataimport.SolrWriter persist
INFO: Wrote last indexed time to dataimport.properties
27-Jan-2012 19:08:13 org.apache.solr.handler.dataimport.DocBuilder execute
INFO: Time taken = 0:0:1.145

Что я мог сделать не так??


person mathieu    schedule 27.01.2012    source источник
comment
Можете ли вы опубликовать свой файл data-config.xml?   -  person Evan    schedule 28.01.2012
comment
Это может быть проблема с файлом data-config.xml или файлом schema.xml.   -  person Nikhil Dinesh    schedule 30.01.2012


Ответы (1)


Я знаю, что не очень хорошо отвечать на собственный вопрос, но в конце концов я понял неприятную проблему, которая вызвала эту ошибку.

Директива, используемая для настройки solr для определенного источника данных, выглядит следующим образом:

<dataSource type="JdbcDataSource" driver="org.sqlite.JDBC" url="jdbc:sqlite:/foo.db"/>

По умолчанию класс JdbcDataSource считывает атрибут batchSize этого XML-узла и предполагает, что для него задано значение 500, если не указано иное. Итак, приведенное выше было фактически эквивалентно:

<dataSource type="JdbcDataSource" ... batchSize="500"/>

Теперь JdbcDataSource передает batchSize методу setFetchSize базового драйвера JDBC (в данном случае драйвера sqlite jdbc). Этот драйвер предполагает, что этот метод на самом деле запрашивает ограничение количества возвращаемых строк, и поэтому в этом случае он никогда не возвращает более 500 строк. Я недостаточно хорошо знаком с ожидаемой семантикой JDBC API, чтобы определить, ошибается ли драйвер sqlite в том, как он интерпретирует это значение, или это класс solr JdbcDataSource, который ошибается в том, как, по его мнению, драйверы будут работать. реагировать на вызов этого метода.

Однако я знаю, что исправление заключается в том, чтобы указать batchSize = "0", потому что драйвер sqlite jdbc предполагает, что нулевое значение означает: "ограничение строк не указано". Я добавил этот совет на соответствующую страницу часто задаваемых вопросов Solr.

person mathieu    schedule 02.02.2012