2011年5月30日月曜日

Solr 4.0 の cross-core join を試す

join を使うと index の設計がシンプルになるんじゃないかなぁと思って、ずっと追っかけてます。

そこで、まだ trunk にある 4.0 を落としてきていろいろやってみました。

しかし、できるようになったと書いてあった cross-core join で、RangeQuery や PrefixQuery などを発行すると結果が 0 件になるという現象に遭遇。
それが使用なのか、バグなのか不明のまま、とりあえず検索できるようにならないかとソースを読み、試行錯誤をしてみました。

JoinQParserPlugin.java で定義されている JoinQuery クラス。これは、Query クラスを継承しているわけですが、その「public Weight weight(IndexSearcher searcher) throws IOException」 メソッドをオーバーライドして、以下のように記述。


上記コードが他への何かしらの影響を及ぼすかもしれません。(勉強不足なのでスンマセン)
それに、4.0 はまだ正式リリースされているわけではないですから、改善されることに期待しています。

せっかく cross-core join があっても、RangeQuery や PrefixQuery が使えなければ、用途が狭まってしまいます。 join は、強力な機能だと思うので、これからも目がはなせません。