日本語形態素解析器Senを導入する その3 インデキシングする

形態素解析用フィールドをスキーマに追加してインデキシングしてみます。
今回はNグラムと形態素解析の違いを確認するために、全く同じ文章をNグラムと形態素解析で2重にインデキシングしてみます。
インデキシング対象のデータはNグラムのときとと同様のブログのURL、ブロガー、タイトルの3つです。
http://d.hatena.ne.jp/knaka20blue/20080813/1218607080

スキーマ形態素解析フィールドを追加する

ブログのタイトルを形態素解析トークナイズするフィールドを追加します。

   <!-- ブログのタイトル text_sen型-->
   <field name="title_morph" type="text_sen" indexed="true" stored="true"/>

schema.xml全体はこんな感じ

% vi $SOLR_HOME/conf/schema.xml

<?xml version="1.0" encoding="UTF-8" ?>
<schema name="example" version="1.1">

  <!-- データ型の定義 -->
  <types>

    <!-- string型の定義。トークナイズしないのでanalyzerの指定とかなし -->
    <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNo
rms="true"/>

    <!-- date型の定義。これもトークナイズしないのでanalyzerの指定とかなし -->
    <fieldType name="date" class="solr.DateField" sortMissingLast="true" omitNor
ms="true"/>

    <!-- CJKTokenizerFactoryでトークナイズする。text_cjk型 -->
    <fieldtype name="text_cjk" class="solr.TextField">
      <analyzer>
        <tokenizer class="solr.CJKTokenizerFactory"/>
      </analyzer>
    </fieldtype>

    <!-- JapaneseAnalyzer( Sen ) でトークナイズする。text_sen型 -->
    <fieldType name="text_sen" class="solr.TextField">
     <analyzer class="org.apache.lucene.analysis.ja.JapaneseAnalyzer"/>
 </types>
 <!-- データ型の定義 -->

 <!-- fieldの定義 -->
 <fields>
   <!-- Valid attributes for fields:
     name: 必須。フィールドの名前
     type: 必須。データの型。fieldTypeで定義したもののどれか。
   -->

   <!-- ブログのURL string型-->
   <field name="URL" type="string" indexed="true" stored="true"/>

   <!-- ブロガの名前 text_cjk型-->
   <field name="bloger" type="text_cjk" indexed="true" stored="true"/>

   <!-- ブログのタイトル text_cjk型-->
   <field name="title" type="text_cjk" indexed="true" stored="true"/>

   <!-- ブログのタイトル text_sen型-->
   <field name="title_morph" type="text_sen" indexed="true" stored="true"/>

  <!-- インデックスした日時が勝手に"timestamp"に入る -->
   <field name="timestamp" type="date" default="NOW"/>
  
 </fields>
 <!-- fieldの定義 -->

 <!-- ユニークキーになるフィールドの指定-->
 <!-- トークナイズされない"string"であること-->
 <uniqueKey>URL</uniqueKey>

 <!-- 検索フィールドが指定されないときに検索されるデフォルトのフィールド -->
 <defaultSearchField>title</defaultSearchField>

 <!-- 複数後で検索されたときのデフォルトの演算子の指定 "AND|OR" -->
 <!-- ORで指定しておけばスコアでソートしたときに
      多くの語が含まれているドキュメントが上位に来るので
      検索エンジンっぽくなってカコイイ。
      ANDを使うのは大量にドキュメントがある場合だけ -->
 <solrQueryParser defaultOperator="OR"/>

</schema>

インデキシング用データを作る

インデキシング用のデータを作ります。以前も使ったブログのデータを拡張します。CSV形式です。
ブログのタイトルをNグラム( title )と形態素解析( title_morph )で2重にインデキシングするためタイトルの文章を2回繰り返しています。

% vi blog.csv
URL,bloger,title,title_morph
http://ameblo.jp/kamijiyusuke/,上地雄輔,オフィシャルブログ「神児遊助」,オフィシャルブログ「神児遊助http://ameblo.jp/momokaeri/,桃華絵里,桃華絵里オフィシャルブログ,桃華絵里オフィシャルブログ
http://ameblo.jp/daigoblog/,DAIGO,DAIGO OFFICIAL BLOG,DAIGO OFFICIAL BLOG
http://ameblo.jp/hoshino--aki/,ほしのあき,ほしのあき オフィシャルブログ by アメーバブログ,ほしのあき オフィシャルブログ by アメーバブログ
http://blog.excite.co.jp/shokotan/,中川翔子,中川翔子オフィシャルブログ しょこたん☆ぶろぐ,中川翔子オフィシャルブログ しょこたん☆ぶろぐ
http://yamamoto-mona.cocolog-nifty.com/,山本モナ,山本モナオフィシャルブログ 山本モナのもなろ〜ぐ,山本モナオフィシャルブログ 山本モナのもなろ〜ぐ
http://manabekawori.cocolog-nifty.com/,眞鍋かおり,眞鍋かおりのココだけの話,眞鍋かおりのココだけの話
http://ramenlove.livedoor.biz/,大崎裕史,自称「日本一ラーメンを食べた男」の日記,自称「日本一ラーメンを食べた男」の日記
http://conte.hoge.com/,コント集団牛の出産,おなじみのレギュラーメンバーが繰り広げるコント,おなじみのレギュラーメンバーが繰り広げるコント
http://tokyo.hoge.com/,東京都事情,今東京都から車が減ってきている,今東京都から車が減ってきている
http://kyoto.hoge.com/,京都の案内人,芸妓さん、舞妓さんに会いにいこう『お茶屋入門』京都観光,芸妓さん、舞妓さんに会いにいこう『お茶屋入門』京都観光
http://abiru.hoge.com/,あびる優,あびる優のブログ,あびる優のブログ
http://management.hoge.com/,企業家応援団,今注目をあびる優れた若手経営者たち,今注目をあびる優れた若手経営者たち

インデキシングする

% curl http://localhost:8080/solr/update/csv --data-binary @blog.csv -H 'Content-type:text/plain; charset=utf-8'

% curl $URL --data-binary '' -H 'Content-type:text/xml; charset=utf-8'

動作確認

形態素解析フィールドを検索

形態素解析フィールドを検索語「ブログ」で検索してみます。

ここまでうまくいっていれば検索結果として1件ヒットすると思います。

<result name="response" numFound="1" start="0">
<doc>
<str name="URL">http://abiru.hoge.com/</str>
<str name="bloger">あびる優</str>
<date name="timestamp">2008-09-23T09:19:07.043Z</date>
<str name="title">あびる優のブログ</str>
<str name="title_morph">あびる優のブログ</str>
</doc>
</result>

タイトルに「ブログ」が含まれるドキュメントは実は6件あるのですが
ここでは1件しかヒットしません。

その理由は次回に...


ではでは


[Solr][Sen] 日本語形態素解析器Senを導入する その1 Senのインストール
[Solr][Sen] 日本語形態素解析器Senを導入する その2 lucene-jaのインストール
[Solr][Sen] 日本語形態素解析器Senを導入する その3 インデキシングする
[Solr][Sen] 日本語形態素解析器Senを導入する その4 再現率が高いNグラム
[Solr][Sen] 日本語形態素解析器Senを導入する その5 精度なら形態素解析
[Solr][Sen] 日本語形態素解析器Senを導入する その6 Nグラムと形態素解析には一長一短あり。目的に応じて使い分けよう