Wikipedia のテキストデータを使ってベンチマークをする! その3 Solr のスキーマ設計


WikiPediaのデータを入れるための Solr のスキーマ設計です。

Wikipedia のデータ構成

[Solr][MySQL] Wikipedia のテキストデータを使ってベンチマークをする! その2 Wikipedia のテキストデータを MySQL に入れるMySQL に入れた Wikipedia のデータ構造は以下の用になっています。



Solr に入れるのは 3のテーブルそれぞれの主キーと、日本語が入っている4つのフィールドの合計7フィールドです。

  • page_id
    • page テーブルの主キーです。Solrでもユニークキーに使います。
  • rev_id
    • revision テーブルの主キーです。検索では特に使わないのですが、デバッグ目的でデータベースを検索したりするときに役だってくれればと思って入れています。
  • old_id
    • text テーブルの主キーです。こちらもデバッグ目的です。
  • page_title
    • タイトルです。
  • rev_comment
    • 編集者のリビジョンに対するコメント
  • old_text
    • いわゆる本文です。


フィールドの詳細については以下を参照してください。
http://www.mediawiki.org/wiki/Page_table/ja#page_title
http://www.mediawiki.org/wiki/Revision_table/ja#rev_user_text
http://www.mediawiki.org/wiki/Text_table/ja

Solr のスキーマ設計

スキーマ構成を記述したschema.xmlです。
3つの主キーは string 型、テキストフィールドは NGramTokenizerFactory を使って 1 文字毎にトークナイズする unigram 型にしています。
unigram 型にするのは SQLのLIKE検索と同等の部分一致検索ができるようにするためです。アルファベットも1文字単位分割されるので例えば BM で BMW が検索できるようになります。

<?xml version="1.0" ?>
<schema name="Wikipedia" version="0.1">

 <types>
  <fieldtype name="string" class="solr.StrField"
    sortMissingLast="true" omitNorms="true"/>
  <fieldtype name="date" class="solr.DateField"
    sortMissingLast="true" omitNorms="true"/>

  <fieldtype name="unigram" class="solr.TextField" omitNorms="false">
   <analyzer>
    <filter class="solr.LowerCaseFilterFactory"/>
    <tokenizer class="solr.NGramTokenizerFactory"
      maxGramSize="1" minGramSize="1" />
   </analyzer>
  </fieldtype>
 </types>

 <fields>
  <field name="page_id" type="string" indexed="true" stored="true"/>
  <field name="rev_id"  type="string" indexed="false" stored="true"/>
  <field name="old_id"  type="string" indexed="false" stored="true"/>
  <field name="page_title" type="unigram" indexed="true" stored="true"/>
  <field name="rev_comment" type="unigram" indexed="true" stored="true"/>
  <field name="rev_user_text" type="unigram" indexed="true" stored="true"/>
  <field name="old_text" type="unigram" indexed="true" stored="true"/>
 </fields>

 <uniqueKey>page_id</uniqueKey>
 <defaultSearchField>page_title</defaultSearchField>
 <solrQueryParser defaultOperator="OR"/>
 <similarity class="org.apache.lucene.search.DefaultSimilarity"/>

</schema>


次回はデータインポートハンドラを使って MySQL のデータを Solr に入れる予定です。



Wikipedia のテキストデータを使ってベンチマークをする! その7 ロードバランサー( haproxy ) を使って Solr 2台構成にしてみた


[Solr][MySQL] Wikipedia のテキストデータを使ってベンチマークをする! その6 Solr は MySQL より 200倍速い!


[Solr][MySQL] Wikipedia のテキストデータを使ってベンチマークをする! その5 Solr と MySQL でざっくり速度対決


[Solr][MySQL] Wikipedia のテキストデータを使ってベンチマークをする! その4 データインポートハンドラ ( DIH Data Import Handler ) を使って Solr にデータを入れる


[Solr][MySQL] Wikipedia のテキストデータを使ってベンチマークをする! その3 Solr のスキーマ設計


[Solr][MySQL] Wikipedia のテキストデータを使ってベンチマークをする! その2 Wikipedia のテキストデータを MySQL に入れるる


[Solr][MySQL] Wikipedia のテキストデータを使ってベンチマークをする! その1 思い立ったこと




今回も参考させてもらいました。