0

xml を含むデータベース列があり、その列の apache solr コンテンツを使用してインデックスを作成したいのですが、次の data-config.xml (構成) があります。データベース名は「solrdb」、カラム名は「xmlfield」ですが、何か問題があるようで、一番下にエラーが明記されています。

<dataConfig>
        <!--Data source to connect to database-->
        <dataSource 
            name="XmlDocDS" 
            type="JdbcDataSource" 
            driver="com.mysql.jdbc.Driver" 
            url="jdbc:mysql://127.0.0.1/solrdb" 
            user="root" 
            password="root" /> 
        <!-- Data Source for getting xml columne data-->    
        <dataSource 
            name="solrFieldReaderDS" 
            type="FieldReaderDataSource"/>
        <document>
            <entity 
                name="xmltable"
                rootEntity="false"
                datasource="XmlDocDS"
                query="select xmlfield from xmltable">
                <field column="xmldata" blob="true" />
                <entity 
                    name="page" 
                    dataSource="solrFieldReaderDS" 
                    dataField="xmltable.xmldata"                 
                    processor="XPathEntityProcessor"             
                    forEach="/page"> 
                    <field column="id" xpath="/mediawiki/page/id"/> 
                    <field column="Title" xpath="/mediawiki/page/title"/> 
                </entity> 
            </entity>
        </document>
</dataConfig>

エラーは次のとおりです。

SEVERE: Exception while processing: xmltable document : null:org.apache.solr.handler.dataimport.DataImportHandlerException: Unable to execute query: select xmlfield from xmltable Processing Document # 1
4

2 に答える 2

0

エラーは、JDBC インポーター コードの次の部分でスローされます。

try {
    Connection c = getConnection();
    stmt = c.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
    stmt.setFetchSize(batchSize);
    stmt.setMaxRows(maxRows);
    LOG.debug("Executing SQL: " + query);
    long start = System.currentTimeMillis();
    if (stmt.execute(query)) {
      resultSet = stmt.getResultSet();
    }
    LOG.trace("Time taken for sql :"
            + (System.currentTimeMillis() - start));
    colNames = readFieldNames(resultSet.getMetaData());
  } catch (Exception e) {
    wrapAndThrow(SEVERE, e, "Unable to execute query: " + query);
  }

そのため、接続またはクエリでエラーが発生する可能性があります (DB に問題がありますか?)。また、「SQL の実行」および「SQL にかかった時間」の grep ログも取得します。

于 2012-05-29T12:00:17.853 に答える
0

接続でエラーが発生しました。何らかの理由でローカル マシンに接続できませんでした。データベース ホストを変更したところ、接続されました。すべてが完了すると、ドキュメントのインデックス作成/更新 = 0 と表示されます

ここに私のxml構成があります

<dataSource
        name="jdbcDataSource"
        driver="com.mysql.jdbc.Driver"
        url="xxxx"
        user="yyyy"
        password="zzzz" readOnly="true"/>

        <dataSource 
            name="solrFieldReaderDS" 
            type="FieldReaderDataSource"/>
        <document>
            <entity
                name="tabledata"
                dataSource="jdbcDataSource"
                query="select codeID,codeText from ArticlePoolState where codeID=3">
                <entity 
                    name="xmldata" 
                    dataSource="solrFieldReaderDS" 
                    forEach="/med"
                    dataField="tabledata.codeText"               
                    processor="XPathEntityProcessor"> 
                    <field column="title" xpath="/title"/> 
                </entity>
            </entity>
        </document>

クエリは問題ありません。

于 2012-05-31T09:33:46.677 に答える