« ネット検索業者育成 著作権の許諾不要に | メイン | mysqld を停止する方法 »

ソート時に指定 fieldが同じならデフォルトの score でソートした順に出す

Lucene で検索を行うには、 org.apache.lucene.search.Searcher クラスの

Hits search(Query query)

メソッドを使う。 このメソッドはデフォルトのスコア付けに基づいて結果を表示する。 フィールドに対してソートした結果を出したい場合は、 次のメソッドを使う。

Hits search(Query query, Sort sort)

2番目の引数には org.apache.lucene.search.Sort クラスのオブジェクトを渡す。 ソート対象が1つのフィールドの場合は、 コンストラクタ

Sort(String field)

を使って生成したオブジェクトを渡せばよさそうだが、 実際やってみたら、 確かに指定したフィールドの値でソートされるのだが、 フィールドの値が同じときの順番がバラバラで、 スコアが反映されていないような気がする?

ソートしたいフィールドが同点のときにデフォルトのスコアでソートするには、 複数フィールドを指定してオブジェクトを生成してやればいい。 SortField クラスは基本的にフィールドを指定するのだが、 デフォルトのスコア付けというのが特別な書き方があって、 フィールド名を null に指定し、 タイプを SortField.SCORE として、 次のコンストラクタを呼び出す。

SortField(String field, int type)

具体的には、 次のような処理になる。

SortField[] fields = new SortField[2];
fields[0] = new SortField(null, SortField.SCORE);
fields[1] = new SortField(DocumentFactory.FIELD_RANK); // JiroSearch 定義の文字列

Hits hits = searcher.search(query, new Sort(fields));

トラックバック

このエントリーのトラックバックURL:
http://blog.crm.co.jp/mt-cgi/mt-tb.cgi/158

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

開発製品

jirologos.gif

About

2007年01月12日 10:55に投稿されたエントリのページです。

ひとつ前の投稿は「ネット検索業者育成 著作権の許諾不要に」です。

次の投稿は「mysqld を停止する方法」です。

他にも多くのエントリがあります。メインページアーカイブページも見てください。

Powered by
Movable Type