Friday, September 16, 2011

Lucene/Solr 3.4 リリース!

気がついたら、Lucene/Solr 3.4 がリリースされていました。3.3 のリリースからそれほど間のないタイミングでのアップデートということで、キャッチアップするだけでも大変な状況です。

自分用のメモ代わりに、ニュースリリースを簡単に和訳してみました。



Lucene 3.4/Solr 3.4 がリリースされました。Lucene PMC によるニュースリリースによると、現在 Lucene/Solr 3.1, 3.2 あるいは、3.3 を利用しているユーザは、アップデートすることを強く推奨しています。これは、機能ハイライトにあるように、OS あるいは、コンピューター のクラッシュ/電源消失により、インデックスが壊れてしまうバグが修正(LUCENE-3418)されているからです。無停電電源のある環境であれば比較的安全なのかも知れませんが、いつそのバグを踏んでしまうか分かりませんし、出来るだけ早めのアップデートを検討した方が良いかもしれません。

Lucene 機能ハイライト:


  • OS あるいは、コンピューターのクラッシュ/予期せぬ電源消失によりインデックスが壊れてしまうバグ (LUCENE-3418) を修正しました。
  • 新しいファセットモジュールとして、検索時にファセットカウントの集計を行うモジュール(LUCENE-3079)を追加しました。
  • JOIN モジュールの追加により、BlockJoinQuery/Collector (LUCENE-3171) を利用して、ネストしたドキュメント(親子関係のあるドキュメント)のインデキシング/検索が可能になりました。
  • タームの位置情報を含めることなく、ターム頻度(タームフリクエンシー:TF)をインデックスに含めることが可能になりました。以前の omitTermFreqAndPositions オプションでは、常時、両方を含めない設定しか行えませんでした。(LUCENE-2048)
  • QueryParser モジュールで、NumericRangeQuery が作成可能になりました。
  • SynonymFilter の追加により、インデキシング/検索時に、複数の類義語への展開が行えるようになりました。また、WordNet や Solr の類義語フォーマットのファイルの利用が可能です。 (LUCENE-3233)
  • ソート対象フィールドで、値が入っていない場合の動作を SortField.setMissingValue によりコントロール出来るようになりました。(LUCENE-3390)
  • addIndexes メソッド実行後に タームベクターが削除されてしまう問題が発生する問題を修正しました。(LUCENE-3403)  #訳注:本文では、LUCENE-3402 となっていますが、LUCENE-3403 の間違いだと思われます。


Solr 機能ハイライト:


  • SolrJ クライアントが、検索結果のグループ/レンジファセットを処理出来るようになりました。(SOLR-2523)
  • 新しい XsltUpdateRequestHandler を利用することにより、XSLT による XML ドキュメントの Solr ドキュメントへの変換とフィードを行うことが可能になりました。(SOLR-2630)
  • ポストグループファセッティングオプション(group.truncate) により、各ファセットグループにおける高いランキングのドキュメントのカウントのみの集計が行えるようになりました。(SOLR-2665)
  • 全ての Update Handler へ commitWithin アップデートリクエストパラメータを追加しました。これにより、特定の時間内での commit を行うように指示が行えます。(SOLR-2540)
  • NIOFSDirectory を指定することが出来るようになりました。(SOLR-2670)  #訳注:DirectoryFactory において、設定出来る項目として追加されています。
  • ハイライトの新しいパラメータ hl.phraseLimit により、FastVectorHighlighter のパフォーマンス向上が行えます。(LUCENE-3234)  #訳注:フレーズマッチの長さ制限を与えることによるパフォーマンス向上ということになります。
  • クエリーキャッシュとフィルターキャッシュをリクエスト毎に使用しないように設定可能になりました。Wiki も参照して下さい。(SOLR-2429)
  • SynonymFilterFactory における、メモリ使用量、ビルド時間およびパフォーマンスを向上しました。(LUCENE-3233)
  • スキーマでの設定に omitPositions を追加しました。これにより、インデキシング時に、ターム頻度(TF)を残したままタームポジションを保持しないようにすることが可能になりました。(LUCENE-2048)
  • マルチスレッド化された DataImportHandler に対していくつかの改善を行いました。


ここまで。

ということで、目玉は、やはりインデックスが壊れてしまうバグの修正でしょうか。でも、これにより Lucene/Solr 3.4 以前の 3.X は、実質的には使えないという事になりますよねぇ。なお、Jira にも書いてあるように、ハリケーン アイリーンのおかげで露呈したバグのようです。

Monday, January 3, 2011

[備忘録] Mac OS X Snow Leopard でことりえ辞書を初期化する

義母が利用している MacBook で、ことえりの日本語変換がむちゃくちゃな状態だと言うので、初期化することに。実は、ATOK の購入も考えたのだけど、まずは初期化して様子見ということで、ちょっと ATOK 11 の実力を見たかったので残念w

 

1. 環境

MacBook Pro 15"

Mac OS X 10.6 Snow Leopard

 

2. 初期化の手順

Users/XX/Library/Preferences


以下のファイルを削除
com.apple.Kotoeri.plist
com.apple.Kotoeri WordRegister.plist
com.apple.Kotoeri Preferences.plist

com.apple.Japanese Analysis フォルダ内の以下のファイルを削除
Environment.plist
InputPrediction.dict
LearningDictionary.dict

再ログインして日本語変換を確認。

Friday, December 24, 2010

[備忘録] Solr 1.4 と cmecab-java で日本語検索環境を構築

Solr と cmecab-java を利用し、日本語形態素解析による検索環境の構築を行ったので、そのときの作業メモ。

稼働環境

MacBook Pro 15" (Unibody, Mid 2010), Core i7 2.66GHz, 8GB RAM
Mac OS X 10.6.5 Snow Leopard


1. MeCab のインストール

cmecab-java は、MeCab の JNI バインディングなので、MeCab がインストールされていることを前提としたものです。なので、何はともあれ、MeCab をインストール。
もし詳しい情報が必要な場合は、過去記事 [備忘録] Mac OS X 10.6 Snow Leopard への Cabocha インストール を参照。


2. Protocol Buffers のインストール

LocalProtobufTagger を利用しないのであれば必要ないのですが、StandardTagger との比較検討対象に考えている場合には、こちらもインストールします。
Google Code のプロジェクトページのダウンロードリストから、protobuf-2.3.0.tar.gz をダウンロードし、適当なディレクトリへ解凍します。例として、/Users/hoge/work とすると、
$ tar zxvf protobuf-2.3.0.tar.gz
$ cd protobuf-2.3.0
$ pwd
/Users/hoge/work/protobuf-2.3.0

お約束の configure & make です。私の場合、サードパーティアプリは、/opt/local へ入れる事にしているので、
$ configure --prefix=/opt/local
$ make
問題なくビルド出来たようであれば、
$ make check
これも問題なければ、インストールします。
$ make install
あるいは、環境や設定、権限によっては、sudo も必要です。
$ sudo make install

3. SCons のインストール

SCons も必要なので、インストールします。
SCons プロジェクトのダウンロードページから、scons-2.0.1.tar.gz をダウンロードし、適当なディレクトリへ解凍します。例として、/Users/hoge/work とすると、
$ tar zxvf scons-2.0.1.tar.gz
$ cd scons-2.0.1
$ pwd
/Users/hoge/work/scons-2.0.1

ここで、インストールします。
$ python setup.py install --prefix=/opt/local
あるいは、権限や環境によっては、sudo が必要です。
$ sudo python setup.py install --prefix=/opt/local

4. Solr のインストール

Sorl をインストールします。
例として、/Users/hoge/work/apache-solr-1.4.1 へ展開し、example ディレクトリをSOLR_HOMEとしました。


5. cmecab-java のインストール

ダウンロードした cmecab-1.7.tar.gz を適当なディレクトリ、例として /Users/hoge/work へ展開します。
$ tar zxvf cmecab-1.7.tar.gz
$ cd cmecab-1.7
$ pwd
/Users/hoge/work/cmecab-1.7

JNIをビルドするため、jni ディレクトリへ行き、scons によりビルドします。この時、SConstruct を、自分の環境にあうように編集します。
$ cd jni
$ vi SConstruct

もし、Mac OS X Snow Leopard を利用している場合、JAVA_HOME は、/usr/libexec/java_home を実行することにより取得できます。つまり、
export JAVA_HOME=`/usr/libexec/java_home`
となります。jni.h などのインクルードファイルは、
export JNI_DIR=$JAVA_HOME/../Headers
などと .bash_profile で定義しておくと良いかもしれないです。
また、上記1.、2. のことから、/opt/local/lib と /opt/local/include も参照される必要があることから、私の環境では、以下のように変更しました。

javahome = os.environ['JAVA_HOME']
incpath = [join(javahome, '../Headers'), '/opt/local/include', '/usr/include']
libpath = ['/usr/lib', '/opt/local/lib']

後は、プロジェクトページのインストールに関する解説通りで、問題なくインストールできます。
なお、libCMeCab.dylib と libCMeCab_protobuf.dylib を、/Users/hoge/work/lib へ置いたので、DYLD_LIBRARY_PATH (Linuxの場合は、LD_LIBRARY_PATH)は、以下のように設定しました。
export DYLD_LIBRARY_PATH=/Users/hoge/work/lib:/opt/local/lib:$DYLD_LIBRARY_PATH

6. Solr 側の設定

a) schema.xml の設定
Jetty を利用してのテストなので、cmecab-1.7.jar と protobuf-java-2.1.0.jar を $SOLR_HOME/solr/lib へコピー
その後、プロジェクトページの使用方法の「Solr から使用する」を参考にして、filedType 定義を追加。



7. Admin GUI による動作の確認

Solr の Field Analysis 画面(Admin GUI の一部)へアクセスする。ポートの設定を変更したので、以下の URL となる。
http://localhost:9983/solr/admin/analysis.jsp
Field のプルダウンで、'type'を選び、テクストボックスへ、'text_mecab' と入力する。
Field value (Index) の 'verbose output' チェックボックスをチェック。
テキストボックスへ、定番の「すもももももももものうち」と入力。
'Analyze'ボタンをクリックする。正常に動いている場合は、画面下部に、
Index Analyzer
org.apache.lucene.analysis.ja.JapaneseAnalyzer {}
と表示され、以下のような解析結果が表示される。




参考にしたサイト


Monday, December 20, 2010

[備忘録] Solr 1.4 と Sen による日本語検索環境の構築

Solr 1.4 と Sen(MeCab の Java 実装)を利用し、オープンソースのみで形態素解析による全文検索が行えるような環境構築を行ったので、その作業メモ。環境は、以下の通り。


稼働環境

MacBook Pro 15" (Unibody, Mid 2010), Core i7 2.66GHz, 8GB RAM
Mac OS X 10.6.5 Snow Leopard


1. 用意するもの

Solr 1.4.1 を、Apache Solr のサイトからダウンロード。 Sen 本体と Solr/Lucene で利用するための lucene-ja プロセッサを、java.net の Sen プロジェクトページからダウンロード



2. Sen のインストール

ダウンロードした sen-1.2.2.1.zip を、適当なディレクトリ。例として、/Users/hoge/work へ解凍する。
$ unzip sen-1.2.2.1.zip
$ cd sen-1.2.2.1
$ pwd
/Users/hoge/work/sen-1.2.2.1

デフォルトでは、EUC-JP を扱うようになっているため、UTF-8 へ設定変更する。
$ cd conf
$ vi sen.xml
charset が euc-jp となっている部分を utf-8 へ書き換える。

$ vi sen-processor.xml
charset が euc-jp となっている部分を utf-8 へ書き換える。

辞書を UTF-8 でビルドするため、プロパティファイルを変更する。
$ cd ../dic
$ vi dictionary.properties
sen.charset=EUC-JP を sen.charset=utf-8 へ書き換える。
その他は、そのままとする。

辞書をビルドする。
$ ant
アーカイブをダウンロードし解凍、ビルドを行う。
もし、sen 本体を再ビルドする場合は、1つ上のディレクトリへ戻り、ビルドを行う。
$ cd ..
$ pwd
/Users/hoge/work/sen-1.2.2.1
$ ant
jar ファイルを solr のライブラリディレクトリへコピーする。
$ cp lib/sen.jar <SOLR_INST_DIR>/example/solr/lib
# lib ディレクトリが無い場合には、作成する。



3. lucene-ja のインストール

sen は、日本語形態素解析エンジンであり、これを Solr/Lucene から利用するためには、Solr/Lucene のAPIを利用したプロセッサ(要は、ラッパーあるいは、コネクタ)が必要となり、これが lucene-ja.jar となる。
ダウンロードした、lucene-ja-2.0test2.zip を適当なディレクトリ、例として /Users/hoge/work へ解凍
$ unzip lucene-ja-2.0test2.zip
$ cd lucene-ja
$ pwd
/Users/hoge/work/lucene-ja
jar ファイルを solr のライブラリディレクトリへコピーする。
$ cp lib/lucene-ja.jar <SOLR_INST_DIR>/example/solr/lib


4. Solr のインストール

ダウンロードした、apache-solr-1.4.1.tgz を適当なディレクトリ、例として、/Users/hoge/work へ解凍する。
$ tar zxvf apache-solr-1.4.1.tgz
$ cd apache-solr-1.4.1
$ pwd
/Users/hoge/work/apache-solr-1.4.1

インスタンスは、example のものを利用するので、SOLR_HOME は、example ディレクトリとなる。
$ export SOLR_HOME=/Users/hoge/work/apache-solr-1.4.1/example



5. Solr の設定

schema.xml の設定
$ cd $SOLR_HOME/solr/conf
$ vi schema.xml
以下のように sen 用のフィールドタイプを追加
<!-- This is an example of using sen for Japanese analysis and tokenization -->
<fieldType name="text_sen" class="solr.TextField">
  <analyzer class="org.apache.lucene.analysis.ja.JapaneseAnalyzer"/>
</fieldType>
<!-- sen -->
fields エントリは、とりあえずそのまま。先ずは、Solr が正常に起動することを確認し、Field Analysis 画面で sen の動作を確認する。



6. Solr の起動

上記 2. での sen インストールディレクトリ、例では、/Users/hoge/work/sen-1.2.2.1 を SEN_HOME として環境変数をセットする。
$ export SEN_HOME=/Users/hoge/work/sen-1.2.2.1
Solr を起動する。
$ cd <SOLR_INST_DIR>
$ java -Dsen.home=$SEN_HOME -jar start.jar

と、ここで問題発生!
solr 1.4 が起動しない。
SEVERE: java.lang.IllegalAccessError
が出ている。

ということで、lucene-ja を Eclipse などで開いてみると。
以下のコンストラクタで、input=in としている部分があるので、コメントアウトする。
コンストラクタ内の super(in) により、TokenFilter の protected final TokenStream input に in がセットされるので、動作は、問題ないです。
lucene-ja/src/org/apache/lucene/analysis/ja/DigitFilter.java
lucene-ja/src/org/apache/lucene/analysis/ja/KatakanaStemFilter.java
lucene-ja/src/org/apache/lucene/analysis/ja/MonitorFilter.java
lucene-ja/src/org/apache/lucene/analysis/ja/POSFilter.java

さらに、以下のファイルのエンコードを UTF-8 へ変更し、
lucene-ja/src/org/apache/lucene/analysis/ja/NormalizeReader.java
public static final int[] CONVERSION_TABLE
を、
public static final char[] CONVERSION_TABLE
と変更。さらに、'-1'が値として定義されていたものを、'0'と変更。
lucene-ja.jar を再ビルドし、用意。ただし、build.xml が用意されていないので、Eclipse からエクスポートした。
TODO: Make a build.xml for lucene-ja.jar
ということで。


7. Admin GUI による動作の確認

Solr の Field Analysis 画面(Admin GUI の一部)へアクセスする。ポートの設定を変更していない場合は、以下の URL となる。
http://localhost:8983/solr/admin/analysis.jsp
Field のプルダウンで、'type'を選び、テクストボックスへ、'text_sen'と入力する。
Field value (Index) の 'verbose output' チェックボックスをチェック。テキストボックスへ、定番の「すもももももももものうち」と入力。
'Analyze'ボタンをクリックする。
正常に動いている場合は、画面下部に、
Index Analyzer
org.apache.lucene.analysis.ja.JapaneseAnalyzer {}
と表示され、以下のような解析結果が表示される。

















参考にしたサイト

http://d.hatena.ne.jp/knaka20blue/20080922/1222104683
http://shower.human.waseda.ac.jp/~m-kouki/pukiwiki_public/96.html

Friday, December 10, 2010

Apple TV 購入!

iPad の OS バージョンアップに合わせ、Apple TV を購入しました。

予想以上に AirPlay が使えることで、非常に気に入りました。

 

Apple TV を 46" の液晶テレビへ繋ぎ、AirPlay で iPhone/iPad からストリーミングしたビデオや写真を見てみましたが、想像以上にキレイでした。友人は、720P だからイマイチだと思う。と言っていましたが、正直、僕自身は、全く気になりません。この値段で、これだけ使えるのなら買いだと思いました。

 

Friday, December 3, 2010

MacJournal for iPad からの投稿テスト

MacJournal for iPad を購入したので、日本語のエントリーをアップロードできるかテスト。これが問題なければ、義母のiPad購入の障害が無くなることになる。

Sunday, October 31, 2010

Lucene Revolution のセッションビデオが公開されています

10月に行われた Lucene Revolution のセッションの様子がビデオで公開されています。

全てのセッションは、公開されていませんが、Twitter, LinkedIn, Salesforce.com などの人気のあったセッションについては公開されているようです。

http://www.lucidimagination.com/events/revolution2010/videos