2

solrにsqliteデータベースの一括インポートを実行するように説得しようとしています。Solr-Wikiのすべての指示に従います。jdbcを介してそのデータベースを正常に開くようにDataImportHandlerを構成し、インポート http:// localhost:8080 / solr / dataimport?command = full-importを開始でき ますが、何をしても、DIHはインデックスのように見えてもドキュメントを追加しませんでしたDB

結果

    <str name="command">full-import</str>

<str name="Total Requests made to DataSource">1</str>
<str name="Total Rows Fetched">**14**</str>
<str name="Total Documents Skipped">0</str>
<str name="Full Dump Started">2012-04-06 01:14:30</str>
<str name="">**Indexing completed**. **Added/Updated: 0 documents**. Deleted 0 documents.</str>
<str name="Committed">2012-04-06 01:14:32</str>
<str name="Optimized">2012-04-06 01:14:32</str>
<str name="Total Documents Processed">0</str>

OracleDBのempテーブルを使用します

data-config.xml

    <dataConfig>
<dataSource name="jdbc" driver="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@//localhost:1521/ORCL" user="scott" password="tiger"/>
<document>
<entity name="emp" query="select EMPNO, ENAME from EMP">
            <field column="EMPNO" name="empno" />
            <field column="ENAME" name="ename" />
</entity>
</document>
</dataConfig>

schema.xml

<field name="empno" type="int" indexed="true" stored="true"/>
<field name="ename" type="string" indexed="true" stored="true"/>

インデックス付けされていないようですが、保存されているインデックス付きデータにはインデックス付けされていません

この問題が発生する理由はありますか?

編集1 ログは次のような警告メッセージを表示します。

    WARNING: Error creating document : SolrInputDocument[{ename=ename(1.0)={SMITH}, empno=empno(1.0)={7369}}]
org.apache.solr.common.SolrException: [doc=null] missing required field: id
    at org.apache.solr.update.DocumentBuilder.toDocument(DocumentBuilder.java:346)
    at org.apache.solr.update.processor.RunUpdateProcessor.processAdd(RunUpdateProcessorFactory.java:60)
    at org.apache.solr.update.processor.LogUpdateProcessor.processAdd(LogUpdateProcessorFactory.java:115)
    at org.apache.solr.handler.dataimport.SolrWriter.upload(SolrWriter.java:73)
    at org.apache.solr.handler.dataimport.DataImportHandler$1.upload(DataImportHandler.java:293)
    at org.apache.solr.handler.dataimport.DocBuilder.buildDocument(DocBuilder.java:636)
    at org.apache.solr.handler.dataimport.DocBuilder.doFullDump(DocBuilder.java:268)
    at org.apache.solr.handler.dataimport.DocBuilder.execute(DocBuilder.java:187)
    at org.apache.solr.handler.dataimport.DataImporter.doFullImport(DataImporter.java:359)
    at org.apache.solr.handler.dataimport.DataImporter.runCmd(DataImporter.java:427)
    at org.apache.solr.handler.dataimport.DataImporter$1.run(DataImporter.java:408)

その種のログが続き、

この警告メッセージはログの最後に表示されます

    2012. 4. 6 오후 12:12:25 org.apache.solr.update.processor.LogUpdateProcessor finish
INFO: {deleteByQuery=*:*,add=[(null), (null), (null), (null), (null), (null), (null), (null), ... (14 adds)],optimize=} 0 0

必須フィールドが欠落していると思いました:idはschema.xmlの構成と何らかの関係があります

<uniqueKey>id</uniqueKey> 

しかし、削除した後、私はこのメッセージを受け取りました

HTTPステータス500-solr構成の重大なエラー。何が間違っている可能性があるかについての詳細は、ログファイルを確認してください。構成エラーの後でsolrを続行する場合は、次のように変更します。solr.xmlのfalse --------------------------------- ---------------------------- org.apache.solr.common.SolrException:QueryElevationComponentでは、スキーマにStrFieldを使用して実装されたuniqueKeyFieldが必要です。 org.apache.solr.core.SolrResourceLoader.informのorg.apache.solr.handler.component.QueryElevationComponent.inform(QueryElevationComponent.java:158)

何かアドバイス?

4

2 に答える 2

3

試す:

    <entity name="emp" query="select EMPNO, ENAME from EMP">
        <field column="EMPNO" name="id" />
        <field column="ENAME" name="ename" />    

data-config.xml に戻し、次のように戻します。

    <uniqueKey>id</uniqueKey>    

schema.xml で、フィールド id も許可します。

または、単に置き換えることができます:

    <uniqueKey>id</uniqueKey>    

と:

    <uniqueKey>epno</uniqueKey>        

それがうまくいくことを願っています。

于 2012-04-06T07:06:27.330 に答える
2

自動インクリメントIDを追加することもできます

 <dataConfig>
<script><![CDATA[
    id = 1;
    function GenerateId(row) {
        row.put('id', (id ++).toFixed());
        return row;
    }
   ]]></script>
<dataSource name="jdbc" driver="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@//localhost:1521/ORCL" user="scott" password="tiger"/>
<document>
<entity name="emp" query="select EMPNO, ENAME from EMP" transformer="script:GenerateId">
        <field column="EMPNO" name="empno" />
        <field column="ENAME" name="ename" />   
        </entity>
</document>
</dataConfig>
于 2012-04-06T11:38:54.893 に答える