はてなの日記データを全文検索
Solr のテストを兼ねて、はてなの日記データからインデックスを作成してみる。
http://d.hatena.ne.jp/knaka20blue/20080813/1218615351
を参考にしてみる。
Solr で使うフィールドは、
- URL
- 日付
- 本文
あたりかな?
schema.xml を用意。
<?xml version="1.0" encoding="UTF-8" ?> <schema name="okinaka" varsion="1.1"> <types> <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/> <fieldType name="date" class="solr.DateField" sortMissingLast="true" omitNorms="true"/> <fieldType name="text_cjk" class="solr.TextField"> <analyzer> <tokenizer class="solr.CJKTokenizerFactory"/> </analyzer> </fieldType> </types> <fields> <field name="url" type="string" indexed="true" sorted="true" /> <field name="date" type="date"/> <field name="body" type="text_cjk" indexed="true" sorted="true" /> </fields> <uniqueKey>url</uniqueKey> <defaultSearchField>body</defaultSearchField> <solrQueryParser defaultOperator="OR" /> </schema>
Ruby で、日記を solr 用のデータに変換してみる。
require "rexml/document" filename='okinaka.xml' base_url = 'http://d.hatena.ne.jp/okinaka/' src = nil File.open(filename) { |fp| src = REXML::Document.new fp } out = REXML::Document.new out << REXML::XMLDecl.new('1.0', 'UTF-8') add = out.add_element('add'); src.elements['diary'].each {|e| next unless e.kind_of? REXML::Element doc = add.add_element('doc'); doc.add_element('field', {'name' => 'url'}).add_text base_url + e.attributes['date'].tr('-', '') doc.add_element('field', {'name' => 'date'}).add_text e.attributes['date'] + 'T09:00:00Z' doc.add_element('field', {'name' => 'body'}).add_text e.elements['body'].text } out.write STDOUT
一応動いたけど・・・。日本語で検索がうまくいかない・・・。