2015-08-10 13 views
1

Мне нужна ваша помощь, чтобы решить большую проблему. Я должен индексировать с помощью solr некоторые данные из источника EMC xDB. Я сконфигурировал xDB для запроса как РСУБД. Затем я настроил Squirrel для запроса xDB. Она работает и когда для Exemple я попробовать:Команда импорта Solr не работает

Select * from books 

Я настроил Solr, используя тот же драйвер и ту же строку подключения, как я использовал для белка.

Вот мои данные-config.xml:

<dataConfig> 
<dataSource type="JdbcDataSource" driver="com.emc.ia.xdbjdbc.Driver" url="jdbc:xdbeas://localhost:1235/MaDatabase" user="*****" password="*****"/> 
<document name="books"> 
    <entity name="book" query="select * from books"> 
     <field column="author" name="author" /> 
     <field column="price" name="price" /> 
     <field column="name" name="name" /> 
     <field column="description" name="description" /> 
     <field column="title" name="title" /> 
     <field column="publish_date" name="publish_date" />   
    </entity> 
</document> 
</dataConfig> 

solrconfig.xml

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> 
    <lst name="defaults"> 
     <str name="config">C:\solr\solr-5.2.1\server\solr\jcg\conf\data-config.xml</str> 
    </lst> 
</requestHandler> 

Мой XDB BOOKS-Metadata.xml:

<?xml version="1.0" encoding="UTF-16"?> 
<TABLEMETADATA TABLENAME="books"> 
    <RECORD-COUNT>2</RECORD-COUNT> 
    <ROOT-ELEMENT>books</ROOT-ELEMENT> 
    <ROW-ELEMENT>book</ROW-ELEMENT> 
    <DATATYPES> 
    <BOOKS-TYPE> 
     <NAME>author</NAME> 
     <COLNO>1</COLNO> 
     <DATATYPE>VARCHAR2(75)</DATATYPE> 
    </BOOKS-TYPE> 
    <BOOKS-TYPE> 
     <NAME>title</NAME> 
     <COLNO>2</COLNO> 
     <DATATYPE>VARCHAR2(75)</DATATYPE> 
    </BOOKS-TYPE> 
    <BOOKS-TYPE> 
     <NAME>genre</NAME> 
     <COLNO>3</COLNO> 
     <DATATYPE>VARCHAR2(25)</DATATYPE> 
    </BOOKS-TYPE> 
    <BOOKS-TYPE> 
     <NAME>price</NAME> 
     <COLNO>4</COLNO> 
     <DATATYPE>VARCHAR2(25)</DATATYPE> 
    </BOOKS-TYPE> 
    <BOOKS-TYPE> 
     <NAME>publish_date</NAME> 
     <COLNO>5</COLNO> 
     <DATATYPE>DATETIME</DATATYPE> 
    </BOOKS-TYPE> 
    <BOOKS-TYPE> 
     <NAME>description</NAME> 
     <COLNO>6</COLNO> 
     <DATATYPE>VARCHAR2(350)</DATATYPE> 
    </BOOKS-TYPE> 
    </DATATYPES> 
</TABLEMETADATA> 

Часть Solr ответы:

"verbose-output": [ 
"entity:book", 
[ 
    "document#1", 
    [ 
    "query", 
    "select * from books", 
    "time-taken", 
    "0:0:0.114", 
    "EXCEPTION", 
    "org.apache.solr.handler.dataimport.DataImportHandlerException: Error reading data from database Processing Document # 1 

Когда я проверяю журналы solr, у меня есть 3 исключения. Номер 1:

getNext() failed for query 'select * from books':org.apache.solr.handler.dataimport.DataImportHandlerException: Error reading data from database Processing Document # 1 
at org.apache.solr.handler.dataimport.DataImportHandlerException.wrapAndThrow(DataImportHandlerException.java:70) 
at org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator.getARow(JdbcDataSource.java:398) 
at org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator.access$600(JdbcDataSource.java:296) 
at org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator$1.next(JdbcDataSource.java:336) 
at org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator$1.next(JdbcDataSource.java:328) 
at org.apache.solr.handler.dataimport.EntityProcessorBase.getNext(EntityProcessorBase.java:133) 
at org.apache.solr.handler.dataimport.SqlEntityProcessor.nextRow(SqlEntityProcessor.java:74) 
at org.apache.solr.handler.dataimport.EntityProcessorWrapper.nextRow(EntityProcessorWrapper.java:243) 
at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:475) 
at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:414) 
at org.apache.solr.handler.dataimport.DocBuilder.doFullDump(DocBuilder.java:329) 
at org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:232) 
at org.apache.solr.handler.dataimport.DataImporter.doFullImport(DataImporter.java:416) 
at org.apache.solr.handler.dataimport.DataImporter.runCmd(DataImporter.java:480) 
at org.apache.solr.handler.dataimport.DataImportHandler.handleRequestBody(DataImportHandler.java:185) 
at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:143) 
at org.apache.solr.core.SolrCore.execute(SolrCore.java:2064) 
at org.apache.solr.servlet.HttpSolrCall.execute(HttpSolrCall.java:654) 
at org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:450) 
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:227) 
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:196) 
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) 
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585) 
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) 
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577) 
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223) 
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127) 
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515) 
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) 
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061) 
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:215) 
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:110) 
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) 
at org.eclipse.jetty.server.Server.handle(Server.java:497) 
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310) 
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) 
at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540) 
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) 
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) 
at java.lang.Thread.run(Thread.java:745) 
Caused by: java.sql.SQLFeatureNotSupportedException: Method com.emc.ia.xdbjdbc.xdb.XdbResultSet.getObject-columnLabel is not yet implemented. 
at com.emc.ia.xdbjdbc.Driver.notImplemented(Driver.java:745) 
at com.emc.ia.xdbjdbc.xdb.XdbResultSet.getObject(XdbResultSet.java:659) 
at org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator.getARow(JdbcDataSource.java:358) 
... 39 more 

Номер 2:

Exception while processing: book document : SolrInputDocument(fields: []):org.apache.solr.handler.dataimport.DataImportHandlerException: Error reading data from database Processing Document # 1 
at org.apache.solr.handler.dataimport.DataImportHandlerException.wrapAndThrow(DataImportHandlerException.java:70) 
at org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator.getARow(JdbcDataSource.java:398) 
at org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator.access$600(JdbcDataSource.java:296) 
at org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator$1.next(JdbcDataSource.java:336) 
at org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator$1.next(JdbcDataSource.java:328) 
at org.apache.solr.handler.dataimport.EntityProcessorBase.getNext(EntityProcessorBase.java:133) 
at org.apache.solr.handler.dataimport.SqlEntityProcessor.nextRow(SqlEntityProcessor.java:74) 
at org.apache.solr.handler.dataimport.EntityProcessorWrapper.nextRow(EntityProcessorWrapper.java:243) 
at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:475) 
at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:414) 
at org.apache.solr.handler.dataimport.DocBuilder.doFullDump(DocBuilder.java:329) 
at org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:232) 
at org.apache.solr.handler.dataimport.DataImporter.doFullImport(DataImporter.java:416) 
at org.apache.solr.handler.dataimport.DataImporter.runCmd(DataImporter.java:480) 
at org.apache.solr.handler.dataimport.DataImportHandler.handleRequestBody(DataImportHandler.java:185) 
at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:143) 
at org.apache.solr.core.SolrCore.execute(SolrCore.java:2064) 
at org.apache.solr.servlet.HttpSolrCall.execute(HttpSolrCall.java:654) 
at org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:450) 
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:227) 
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:196) 
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) 
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585) 
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) 
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577) 
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223) 
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127) 
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515) 
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) 
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061) 
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:215) 
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:110) 
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) 
at org.eclipse.jetty.server.Server.handle(Server.java:497) 
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310) 
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) 
at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540) 
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) 
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) 
at java.lang.Thread.run(Thread.java:745) 
Caused by: java.sql.SQLFeatureNotSupportedException: Method com.emc.ia.xdbjdbc.xdb.XdbResultSet.getObject-columnLabel is not yet implemented. 
at com.emc.ia.xdbjdbc.Driver.notImplemented(Driver.java:745) 
at com.emc.ia.xdbjdbc.xdb.XdbResultSet.getObject(XdbResultSet.java:659) 
at org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator.getARow(JdbcDataSource.java:358) 
... 39 more 

И последнее:

Full Import failed:java.lang.RuntimeException: java.lang.RuntimeException: org.apache.solr.handler.dataimport.DataImportHandlerException: Error reading data from database Processing Document # 1 
at org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:270) 
at org.apache.solr.handler.dataimport.DataImporter.doFullImport(DataImporter.java:416) 
at org.apache.solr.handler.dataimport.DataImporter.runCmd(DataImporter.java:480) 
at org.apache.solr.handler.dataimport.DataImportHandler.handleRequestBody(DataImportHandler.java:185) 
at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:143) 
at org.apache.solr.core.SolrCore.execute(SolrCore.java:2064) 
at org.apache.solr.servlet.HttpSolrCall.execute(HttpSolrCall.java:654) 
at org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:450) 
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:227) 
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:196) 
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) 
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585) 
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) 
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577) 
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223) 
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127) 
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515) 
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) 
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061) 
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:215) 
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:110) 
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) 
at org.eclipse.jetty.server.Server.handle(Server.java:497) 
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310) 
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) 
at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540) 
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) 
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) 
at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.RuntimeException: org.apache.solr.handler.dataimport.DataImportHandlerException: Error reading data from database Processing Document # 1 
at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:416) 
at org.apache.solr.handler.dataimport.DocBuilder.doFullDump(DocBuilder.java:329) 
at org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:232) 
... 29 more 
Caused by: org.apache.solr.handler.dataimport.DataImportHandlerException: Error reading data from database Processing Document # 1 
at org.apache.solr.handler.dataimport.DataImportHandlerException.wrapAndThrow(DataImportHandlerException.java:70) 
at org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator.getARow(JdbcDataSource.java:398) 
at org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator.access$600(JdbcDataSource.java:296) 
at org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator$1.next(JdbcDataSource.java:336) 
at org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator$1.next(JdbcDataSource.java:328) 
at org.apache.solr.handler.dataimport.EntityProcessorBase.getNext(EntityProcessorBase.java:133) 
at org.apache.solr.handler.dataimport.SqlEntityProcessor.nextRow(SqlEntityProcessor.java:74) 
at org.apache.solr.handler.dataimport.EntityProcessorWrapper.nextRow(EntityProcessorWrapper.java:243) 
at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:475) 
at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:414) 
... 31 more 
Caused by: java.sql.SQLFeatureNotSupportedException: Method com.emc.ia.xdbjdbc.xdb.XdbResultSet.getObject-columnLabel is not yet implemented. 
at com.emc.ia.xdbjdbc.Driver.notImplemented(Driver.java:745) 
at com.emc.ia.xdbjdbc.xdb.XdbResultSet.getObject(XdbResultSet.java:659) 
at org.apache.solr.handler.dataimport.JdbcDataSource$ResultSetIterator.getARow(JdbcDataSource.java:358) 
... 39 more 

Заранее спасибо за вашу помощь, потому что я действительно не понимаю, почему он работает с белкой а не с solr.

Вопрос редактирования для того, чтобы ответить на @Cheffe

Это действительно проблема водителя XDB из-за метода GetObject(). Я смотрел на код белки, и он работает, потому что он использует индекс столбца, а не его имя.

int idx = _columnIndices != null ? _columnIndices[i] : i + 1; 
     try 
     { 
      final int columnType = _rsmd.getColumnType(idx); 
      //final String columnClassName = _rsmd.getColumnClassName(idx); 
      switch (columnType) 
      { 
       case Types.NULL: 
        row[i] = null; 
        break; 

       // TODO: When JDK1.4 is the earliest JDK supported 
       // by Squirrel then remove the hardcoding of the 
       // boolean data type. 
       case Types.BIT: 
       case 16: 

// случай Types.BOOLEAN: строка [I] = _rs.getObject (IDX); . . .

Во всяком случае он работает с

convertType="true" 
+0

Я не 100% уверен, что ваш DataSource поддерживается в Solr , учитывая трассировку стека. – TMBT

+0

Самое удивительное, что это работает с белкой, поэтому водитель может быть в порядке –

ответ

1

После проверки источников Solr: Оказывается, что водители этой базы данных, вероятно, не подходят для запуска с DIH в Solr. К сожалению, база данных запатентована, поэтому я не могу ее пробовать.

Исключения выбрасываются из драйвера вашего поставщика. Все три причины коренятся там. Вы можете видеть, что при прокрутке вниз до самой нижней части трассировки стека. Все рассказать об этих stacktraces сказать вам

Метод xxx.getObject-columnLabel еще не реализована.

Это означает: поставщик базы данных EMC не использовал этот метод в своем драйвере JDBC.Если вы не хотите, чтобы ваши руки были грязными, вы должны подать им отчет об ошибке или запрос функции, в котором вам нужна эта функция.


Один выстрел может иметь в том, что последняя строка в StackTrace, что отмечает источники SOLR ведут к the internal getARow method

private Map<String, Object> getARow() { 
    if (resultSet == null) 
    return null; 

    Map<String, Object> result = new HashMap<>(); 
    for (String colName : colNames) { 
    try { 
     if (!convertType) { 
     Object value = resultSet.getObject(colName); // <-- here the exception takes of 
     if (value instanceof BigDecimal || value instanceof BigInteger) { 
     result.put(colName, value.toString()); 
     } else { 
     result.put(colName, value); 
     } 
     continue; 
    } 
// more code there, but left out 

Вы можете получить вокруг вызова resultSet.getObject с помощью установки параметра конфигурации вашего dataimporthandler , Именно это

convertType (по умолчанию: ложь) - применяется дополнительное преобразование из типа поля, возвращенного в базе данных для типа поля, определенного в schema.xml. Значение по умолчанию кажется более безопасным, поскольку оно не вызывает дополнительного, магического преобразования. Однако в особых случаях (например, BLOB-поля) это преобразование является одним из способов решения проблемы. [Reference]

Вы должны сделать это в данных-config.xml

<dataConfig> 
<dataSource convertType="true" type="JdbcDataSource" driver="com.emc.ia.xdbjdbc.Driver" url="jdbc:xdbeas://localhost:1235/MaDatabase" user="*****" password="*****"/> 

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

  1. Ask вы вендора сделать это
  2. Написать импорт пользовательских данных рутинного
+0

Я уже написал обычную рутину, но спасибо за ваш ответ. Я соответствующим образом отредактировал свой вопрос. –