形態素解析用フィールドをスキーマに追加してインデキシングしてみます。
今回は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グラムと形態素解析には一長一短あり。目的に応じて使い分けよう