質問

DataImportHandlerを使用してSolrのMySQLテーブルを索引付けしようとしていますが、索引付け

ではないようです。

data-config.xml

 <?xml version="1.0" encoding="UTF-8" ?>
    <dataConfig>
      <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver"
                  url="jdbc:mysql://localhost/solr_tut" 
                  user="root" 
                  password=""/>
      <document>
        <entity name="product_id" 
                query="select product_id,name,description from products">
        </entity>
      </document>
    </dataConfig>
.

solrconfig.xml

<lib dir="../../../contrib/dataimporthandler/lib/" regex=".*\.jar" />
<lib dir="../../../dist/" regex="solr-dataimporthandler-\d.*\.jar" />


<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
       <lst name="defaults">
          <str name="config">data-config.xml</str>
      </lst>
 </requestHandler>
.

Solr Admin(http://localhost:8080/solr/dataimport?command=full-import)でインデックスを実行しようとすると、この応答が得られています

<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">19</int>
</lst>
<lst name="initArgs">
 <lst name="defaults">
  <str name="config">data-config.xml</str>
 </lst>
</lst>
<str name="command">full-import</str>
<str name="status">idle</str>
<str name="importResponse"/>
<lst name="statusMessages">
   <str name="Total Requests made to DataSource">1</str>
   <str name="Total Rows Fetched">4</str>
   <str name="Total Documents Skipped">0</str>
   <str name="Full Dump Started">2014-01-10 10:38:00</str>
   <str name="">
     Indexing completed. Added/Updated: 0 documents. Deleted 0 documents.
   </str>
   <str name="Committed">2014-01-10 10:38:00</str>
   <str name="Total Documents Processed">0</str>
   <str name="Time taken">0:0:0.33</str>
</lst>
<str name="WARNING">
This response format is experimental. It is likely to change in the future.
</str>
</response>
.

検索した後(http://localhost:8080/solr/select?q=*:*)、0の結果を得ています。

update-1: schema.xml

役に立ちましたか?

解決

結果セット内の列のマッピングをドキュメントフィールドにマッピングしました。 entitydata-config.xml要素内でそれをする必要があります。

<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
  <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver"
              url="jdbc:mysql://localhost/solr_tut" 
              user="root" 
              password=""/>
  <document>
    <entity name="product_id" 
            query="select product_id,name,description from products">

 <!-- this is the place where you map the columns of your result set
      to fields of the new solr document -->

        <field column="PRODUCT_ID" name="id" />
        <field column="NAME" name="name" />
        <field column="DESCRIPTION" name="description" />

    </entity>
  </document>
</dataConfig>
.

あなたの場合にあなたが逃したバイタルマッピングが1つあります。 product_idへのid SOLRは、スキーマ内の列名とフィールドの名前が等しい場合、Wiki

で書かれている場合は、マッピングを自動検出できます。

上記の例では、SOLRフィールドへのフィールドのマッピングがあります。フィールドの名前がSOLRスキーマ内のものとして(問題ない場合)、エンティティ内のフィールドエントリを完全に回避することは可能です。

しかし、そうではないので、そうではありません。 product_ididは異なります。 idフィールドはrequiredであるため、これらの文書はインデックスにはなりません。

詳細情報は DataImportHandler について参照でガイド

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top