RONDHUIT REPORT Vol.7 – LUCENE/SOLR 3.1 NEW FEATURES

Lucene/Solr	 3.1 の新機能	 
2011 年 3 月 22 日株式会社 ロンウイット

関口宏司

うに 3.0 以前の動作となるように設定されている：

はじめに	 
まもなく公開される Lucene/Solr 3.1 の新機能を紹@Depracated public SimpleAnalyzer(){this(Version.LUCENE_30);

介する。
}

1.	 バージョンについて	 

Version 型の引数はほとんどが Analyzer の動作のSolr のユーザーはこれまでのバージョン 1.4 からい

後方互換性を維持するために使用されているが、例

きなり 3.1 に番号が飛ぶのに戸惑うかも知れない。

外もある。たとえば QueryParser が PhraseQuery

これは昨年 3 月に Lucene と Solr のソースコード管を 生 成 す る か ど う か を 規 定 す る

理や開発者がマージされたことに伴う副作用のよう

setAutoGeneratePhraseQueries() メ ソ ッ ド の デなものである。Lucene と Solr のソースコード管理フォルト設定に影響を与える。日本語では特にツリーがマージされたことにより、Solr のバージョ

N-gram のトークナイザーを利用している場合に注ンが Lucene のそれにあわされた。またこのことか

意ら今回のように Lucene と Solr の同時リリースが容

http://lucene.jugem.jp/?eid=395

易 に 行 え る よ う に な っ た 。（ 参 考 ：http://lucene.jugem.jp/?eid=403 ）。Solr では

http://www.slideshare.net/KojiSekiguchi/lu-s

こ の Lucene の デ フ ォ ル ト 動 作 が 逆 に な り 、

olr-20100709 ）TextFieldが必要であろう（参考：、の フ ィ ー ル ド 型 の 設 定 でautoGeneratePhraseQueries=”false”を明示しな
Lucene は 3.0 から Java 5 以上のサポートとなった

いと Lucene のデフォルトと同じ動作にならない。

が、3.1 から正式に Unicode 4 の補助文字をサポートするようになった。これにより、Analyzer の補助

Solr に お け る Version 型 の 設 定 に 関 し て は 、文字に対する動作が 3.0 以前と 3.1 以降では異なる

solrconfig.xml の中で次のように行う：ことがある。たとえば、補助文字の大文字=>小文字正規化の動作などである。この後方互換性を取るた<luceneMatchVersion>LUCENE_31

めに、Lucene では Version と呼ばれる enum 型を</luceneMatchVersion>導入した。たとえば、SimpleAnalyzer にて 3.1 以
また、schema.xml で Lucene の Analyzer を直接降の動作をさせたい場合は：使 う 場 合 、 luceneMatchVersion=”LUCENE_31”などと指定する。省略時は LUCENE_24 となる。

SimpleAnalyzer a =new SimpleAnalyzer(Version.LUCENE_31);という生成の仕方をすることになる。従来の引数なしのコンストラクタは deprecated となり、次のよ

2.	 スキーマや Analyzer	 
フィールド圧縮がサポートされなくなった（圧縮がCopyright © RONDHUIT Co.,Ltd.
1

RONDHUIT REPORT Vol.7 – LUCENE/SOLR 3.1 NEW FEATURES

フィールドの仕事ではなくなった）。これにより、知っているユーザーでも、クラスパスの設定ミスにField の byte[]と Store を引数に取るコンストラク

より、古い SolrJ を無意識に使ってしまっているとターが deprecated になった。これまでの古いイン

やはりバージョンの不整合が出てしまう。これはなデックスで圧縮されていた Stored フィールドは、かなか発見が難しい問題なので、現在はエラーメッマージされるときに自動的に展開されるのでサイズセージを表示する際に、バージョン番号も表示されが大きくなる可能性があり、注意が必要である。

るようになっている。

Analyzer 関連では、出力するトークン数の上限を抑SolrJ はこれ以外にも、クエリファセット時の順序保える LimitTokenCountFilter が追加された。従来イ持などの改善がなされている。

ンデクシング時にフィールドに登録されるトークン数を抑えるにはIndexWriterの4.	 検索一般

setMaxFieldLength()というメソッドを使っていたが、このメソッドは deprecated になり、今後は64 ビットの Windows または Solaris で JVM がLimitTokenCountFilter を使うのが推奨となっていun-map

る。これにより、フィールド毎に上限の設定を変え（ることが可能となる。そのほかにも、正規表現で文

java.nio.DirectByteBuffer クラスの cleaner メソ

字を正規化する PatternReplaceCharFilter や、フッ ド が 存 在 し て い る こ と を 指 す ）、ァイルシステム等の階層構造を保持した状態でトーFSDirectory.open()は MMapDirectory を返すよ

クナイズする PathHierarchyTokenizer などが追加うになった。これは検索時にインデックスファイルされている。

を仮想メモリ空間にマッピングする Directory 実装

を サ ポ ー ト し て い る 場 合sun.misc.Cleaner

クラスとである。インデックスサイズと物理メモリ量の見合いで、環境やアプリケーションによっては検索性能3.	 SolrJを向上させることができるかもしれない。

SolrJ は Solr サーバーに Java プログラムで書かれたクライアントがアクセスする際に便利に使用できmultiValued=”true”のフィールドで、ソートや関数るライブラリである。SolrJ と Solr は javabin とクエリの適用は許可されないが、これまではフィーSolr で呼んでいるシリアライズフォーマットを使用

ルド値の内容（ユニークターム数）によっては「成しているが、今回このフォーマットが変わり、バー功」しているように動作していた。3.1 以降ははっジョン 2 となった。従来は、Modified UTF-8 のバきりと「失敗」するように動作仕様が変更になった。

イトデータの前に UTF-16 文字数がつけられてやりとりされていたが、これはバグである。3.1 ではこ検索についてはそれ以外に、次のような改善や機能れが修正されて、UTF-8 のバイトデータの前にその追加がある：バイト数が正しく送られるようになっている。この変更により、Solr サーバー側を 3.1 にしたら、SolrJ

関数クエリの結果によるソートを使用しているクライアント側も同時に 3.1 にする



拡張 DisMax クエリパーサーのサポート必要がある。



一般的な範囲ファセットのサポート。これにより、日付型の範囲ファセットが deprecated とこの変更が行われた直後から、バージョンがあわななったいというエラーが出るのだが、というユーザーからの問い合わせが多く見られるようになった。背景をCopyright © RONDHUIT Co.,Ltd.
2

RONDHUIT REPORT Vol.7 – LUCENE/SOLR 3.1 NEW FEATURES

5.	 分散検索
分散検索については、次のような改善があった：SpellCheckComponent の分散検索対応

TermsComponent の分散検索対応



StatsComponent を分散検索環境でファセット付きで使用しているとき、NPE が出る問題に対応

7.	 ハイライター

なお、SearchComponent ごとの分散検索対応状況

Lucene 2.9 から登場した FastVectorHighlighter

は、http://lucene.jugem.jp/?eid=406 にまとめを Solr 3.1 でサポートした。これにより N-gram フられている。

ィールドを問題なくハイライト表示できるようになった。solrconfig.xml でのハイライターの設定がこれまでは<config>の直下に書いていたが、この方法

6.	 空間検索／地理検索

は deprecated と な り 、 新 し い 書 式 で は

空間検索／地理検索に関しては、次のような改善やHighlightComponent の中に書くようになったの機能追加があった：で注意していただきたい。このほかにも、Luceneの Encoder を Solr で導入したり等、細かな改善が

Solr の関数 dist（マンハッタン距離、ユークリされている。

ッド距離）、sqedist（正方形型のユークリッド距離。演算の負担が少ない）、strdist（スペル8.	 マルチコアチェッカーなどに使われる編集距離）の追加
Solr の関数 hsin（Great Circle Haversine）、Solr 3.1 では ALIAS コマンドのサポートがなくなっghhsin（GeoHash-hsin）の追加。またこれらた。また、シングルコアの利用時でも solr.xml をの関数を使うにあたって単位の変換を行う

Solr ホームディレクトリに配置することが推奨されgeohash(), deg(), rad()の関数の追加ている。

PointType, LatLonType, GeoHashField の追加

9.	 レプリケーション

なお、Solr 3.1 の付属サンプルデータには、架空のJava ベースのレプリケーション機能における日時ショップの位置情報が追加され、Solr を起動してサをファイル名の一部に採用しているときの不具合ン、（午後 1 時が 1300 とならずに 0100 となってしま

http://localhost:8983/solr/browse に ア ク セ スう）の修正や、スクリプトベースのレプリケーショ

すると、下図のような GEO サーチ機能付きの画面がンで rsync 稼働時のデータ転送量の調整ができるよ表示されるようになった：

うにした改善などが加えられている。

プル

データを登録し

なお、マスター／スレーブ構成を採用しているプロジェクトでは、旧バージョンからのアップグレードは、スレーブ側を最初に行うこと。マスター側を最Copyright © RONDHUIT Co.,Ltd.
3

RONDHUIT REPORT Vol.7 – LUCENE/SOLR 3.1 NEW FEATURES

初にアップグレードしてしまうと、新しいインデックスがスレーブに転送されたとき、スレーブの古いうにする機能の追加
Javadoc に google-code-prettify を適用し、Solr が新しいフォーマットのインデックスを読めなXML 設定例やサンプルプログラムをユーザーいからである。

にとって読みやすくする改善
最後の Javadoc の改善は、弊社からのコミュニティ10.	 DIHへの提案が反映されたものである。弊社では、Solr

3.1 では（Solr 1.4 から内蔵された）Apache Tikaの日本語検索機能や集合知利用等の各種機能強化にを利用することで Microsoft のオフィスファイルやサポートサービスを加えた「サブスクリプション・PDF ファイル等も DIH のインタフェースを通じてイパッケージ」を販売している。その機能強化部分のンポートできるようになった。また、マルチスレッ

Javadoc は以下で公開している：

ドで動作させられるようになった。
http://www.rondhuit-demo.com/RCSS/api/
さらに、Solr 1.3/1.4 で発見されたさまざまな不具合修正もされている。弊社では DIH の教育トレーニ

この Javadoc 内で google-code-prettify を利用しン：ており、JavaScript によるシンタックスハイライテ

http://www.rondhuit.com/training.html ）を提ィングを行っている（例として、analysis パッケー供しているが、このコーステキストを準備中にも実ジ内のファクトリクラスを参照されたい）。弊社はにさまざまな不具合に遭遇した。その中には「子エLucene/Solr の Javadoc でもこれを使うべきであンティティがルートエンティティのときに、差分イるとコミュニティに提案した。するとすぐさまンポートが正しく動作しない」という重大なものもJavadoc 生成方法に関する Ant 実行時のいくつかのあ っ た が 、 3.1 で は 修 正 さ れ て い る （ 参 考 ：改善コメントが寄せられた。弊社ではその改善を自https://issues.apache.org/jira/browse/SOLR-社に逆輸入することによって自社製品のメンテナン2252 ）。

ス性を改善することができた。OSS とビジネスが融グコース（参考

合した今風のエコシステムを実感した瞬間であ
なお、従来は DIH の JAR ファイルが solr.war に含る。
・・・もっとも一番偉いのは、prettify を Apache

まれた状態で配布されていたが、他の contrib パッ

License 2.0 で公開してくれた Google であること

ケージ同様 3.1 からは DIH は war に含まれなくなはいうまでもない。

ったので、solrconfig.xml の<lib/>設定に DIH を含める必要がある。

（株）ロンウイットについてロンウイットはオープンソースの全文検索エンジン
Lucene /Solr を企業システムに導入する支援サー11.	 その他

ビス事業を展開している。

その他の新機能や改善には、以下のようなものがあ

お問い合わせ先〒100-0005 東京都千代田区丸の内 1-8-3

る：

丸の内 トラストタワー本館 20 階
Solr の Apache UIMA の取り込み

電話：03-5288-5927

Solr に登録する XML ファイルを UTF-8 以外の

メール：sales@rondhuit.com

エンコーディングでも可能にする改善

ホームページ：http://www.rondhuit.com/

Solr に検索専用の RAMDirectory を使えるよ
Copyright © RONDHUIT Co.,Ltd.
4

FAX：03-5288-5928