solr入門およびdih概要

7474 ワード

Apache Solrはオープンソースの検索サーバで、ここではsolrdih(dataImportHandler)コンポーネントを直接書きたいと思っていた入門の基礎知識を紹介しますが、solrの基礎知識にかかわる内容があることに気づき、一緒に書きました.
Solrのリソースのダウンロードは直接行けますhttp://lucene.apache.org/solr/,https://archive.apache.org/dist/lucene/solr/(履歴バージョン)
本稿では3.5バージョンsolrを使用してwikiから見ると(http://wiki.apache.org/solr/DataImportHandler)、dihコンポーネントは1.3バージョンから存在する可能性があります.
Solrのディレクトリの説明:
example/solr:このディレクトリは、デフォルトの構成情報を含むSolrのホームディレクトリです.
Solrホームディレクトリとは、実際には、実行中のSolrインスタンスに対応する構成とデータ(Luceneインデックス)です.
example/solr/confディレクトリでは、インデックスするフィールド情報を構成します.ここでは、インデックスブックのデータを例に挙げます.まず、私たちは中国語の分詞器を配置しなければならない.分詞とは、簡単な理解は、1つの完全な言葉を複数の語に切断することである.例えば、静消のブロガーを静/消/の/ブロガー/萌/ダダ/の/に切断することであり、本稿で採用する中国語の分詞はik分詞器である.schemaでxmlで対応する分詞器を構成し、ik分詞器のjarパッケージを${solrhome}/contrib/extraction/libディレクトリにインポートします(solrのデフォルトプロファイルsolconfig.xmlによって、${solrhome}/example/solr/confディレクトリでは、solrのデフォルトでいくつかのディレクトリのjarパッケージファイルがインポートされ、下図のように構成されていることが観察されます):
solr入门以及dih简介_第1张图片 jarパッケージをインポート後、${solrhome}/example/solr/conf/schema.xmlでik分詞器を構成できます.以下の構成になります.
<!--     types     -->

 <types>

    <!-- The StrField type is not analyzed, but indexed/stored verbatim. -->

<!--ik  -->

<fieldType name="text_ik" class="solr.TextField">

- <analyzer type="index">

  <charFilter class="solr.HTMLStripCharFilterFactory" /> 

  <tokenizer class="org.wltea.analyzer.solr.IKTokenizerFactory" useSmart="true" /> 

  </analyzer>

- <analyzer type="query">

  <charFilter class="solr.HTMLStripCharFilterFactory" /> 

  <tokenizer class="org.wltea.analyzer.solr.IKTokenizerFactory" useSmart="true" /> 

  </analyzer>

  </fieldType>

- <fieldType name="text_cjk" class="solr.TextField">

- <analyzer type="index">

  <tokenizer class="solr.CJKTokenizerFactory" /> 

  </analyzer>

- <analyzer type="query">

  <tokenizer class="solr.CJKTokenizerFactory" /> 

  </analyzer>

  </fieldType>

分詞器を設定すると、solrのWebコンソールで分詞効果を観察できます.正常に分詞を配置すると、分詞効果は以下のようになります.
solr入门以及dih简介_第2张图片の配置に成功した後、solrの初期配置は一段落し、次は私たちの主役dihを出場させてください(ここに拍手があるはずです):
Solr dihは、データベースから直接(一般的に)、インクリメンタル(自動インクリメンタル可能)とインデックスの全量インポートを実現する補助ツールであり、マルチデータベースソースをサポートします.次にdihの構成を見てみましょう.
まずsolconfig.xmlでdihを構成するとともに、データベースのjarパッケージも${solrhome}/contrib/extraction/libディレクトリの下に置く必要があります.
 <requestHandler name="/dataimport" class="solr.DataImportHandler">
        <lst name="defaults">
<!--               ,  solrconfig.xml       ->
        <str name="config">solr-data-config.xml</str>
        </lst>
     </requestHandler>

データベースフィールドの構成はsolr schema.xmlは、データベースフィールドに対応するインデックスフィールドを構成します.ここでは、インデックスされた書籍のフィールドを例に挙げます.
<field name="book_name" type="text_ik" indexed="true" stored="true"/>
   <field name="book_publisher" type="text_ik" indexed="true" stored="true"/>
   <field name="book_keyword" type="text_ik" indexed="true" stored="true"/>
   <field name="book_summary" type="text_ik" indexed="true" stored="true"/>
   <field name="book_isbn" type="string" indexed="true" stored="true"/>
   <field name="book_publish_year" type="string" indexed="true" stored="true"/>
   <field name="book_publish_month" type="string" indexed="true" stored="true"/>
    <field name="book_price" type="float" indexed="true" stored="true"/>
	<field name="book_author" type="string" indexed="true" stored="true"/>

書籍を配置したsolr schema.xml、前述のデータベースプロファイル(solr-data-config.xml)を構成し、データベース内のデータとsolrインデックスを対応させます.
<dataConfig>
    <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/bookdata" 
user="root" password="root"/>
    <document>
        <entity name="book" pk="id" query="select * from book_detail_bak limit 
${dataimporter.request.length} offset ${dataimporter.request.offset}"
        deltaImportQuery="select * from book_detail_bak where id='${dih.delta.id}'"
                deltaQuery="select id from book_detail_bak where LAST_MODIFIED_TIME &gt; 
'${dih.request.lasttime}'"
                >
            <field name="book_name" column="bookname"/>
            <field name="book_publisher" column="PUBLISHER"  />
             <field name="book_isbn" column="ISBN"  />
            <field name="book_keyword" column="keyword"/>
           <field name="book_summary" column="CONTENTSUMMARY"/>
           <field name="book_publish_year" column="PUBLISHINGYEAR"/>
           <field name="book_publish_month" column="PUBLISHINGMONTH"/>
            <field name="book_price" column="BOOKPRICE"/>
            <field name="book_author" column="author"/>
           </entity>
            
    </document>
</dataConfig>

すべての構成が完了すると、全量インポートが有効になります.solr dihの全量インポートは、データ量が非常に大きい場合、次のようなバッチインポートを使用します.
http://localhost:8983/solr/dataimport?command=full-import&commit=true&clean=false&offset=0&length=10000
//ここでclean=falseを追加する必要があります.デフォルトはtrueで、solrに以前に作成したインデックスを全量インポートするたびに削除しないように伝える役割を果たします.http://localhost:8983/solr/dataimport?command=full-import&commit=true&clean=false&offset=10000&length=10000
したがってsolr dihの全量インポートは、場合によっては不便かもしれませんが、ほとんどの場合、一般的なアプリケーションを満たすことができますが、インクリメンタルインポートは、ここでsolr dihが行ったほうがいいです.自動インクリメンタルインポートの実装もあります(実際には自動インクリメンタルインポートも、タイマーで完了しています).
注意事項:
前述したデータベースプロファイル(solr-data-config.xml)の次のとおりです.
 
pk属性はインクリメンタルインポート時に加算し、データテーブルのidとして指定する必要があります.
インクリメンタルインポートには、次のように、アドレスバーでインクリメンタル更新の時間を手動で指定するテクニックがあります.
http://127.0.0.1:8983/solr/dataimport?command=delta-import&commit=true&lasttime=20150101