Lucene から返された検索結果をフィールドごとにグループ化するにはどうすればよいですか (SQL Server の場合と同様)。
4 に答える
Lucene3.4はファセット検索をサポートするようになりました。索引付けでは補足的なものを指定し、検索時にはクエリおよびグループで検索します。
次の3つのドキュメントでは、これらのグループでインデックスを作成します
doc1: monday, 1pm, 3min
doc2: monday, 1pm, 4min
doc3: monday, 2pm, 3min
最初のパラメータ:mondayのみを検索してvalue:3を取得するか、ドリルダウンしてmonday / 1pmを検索してvalue:2を取得するか、検索の深さ3を設定して取得することができます。
monday :3
monday/1pm :2
monday/1pm/3min :1
monday/1pm/4min :1
monday/2pm :1
monday/2pm/3min :1
これがソースサンプルです:
しかし、何よりもファセット検索を読む
https://issues.apache.org/jira/browse/LUCENE-1421
できないようです。ただし、回避策がある可能性があります。他の誰かがそれを行った方法を概説するスレッドがここにあります:ここ
Lucene にはいくつかの補助ライブラリがあり、その 1 つが必要なものです。
関数クエリ値や任意のクエリ (Solr のように) でグループ化することはできませんが、単一値フィールドでグループ化することはできます。
似たようなもの(ファセット検索)が Lucene 4.0 で実装されます
真の SQL に似た "GROUP BY" 動作が必要なのか、単に "ORDER BY" 動作が必要なのかは明確ではありません。Lucene には集計関数のようなものはないため、「GROUP BY」は Lucene の上にアプリケーションに実装する必要があります。
ただし、フィールドによる並べ替えはかなり簡単です。目的のフィールドがインデックス化されていることを確認しorg.apache.lucene.search.Sort
、検索基準の一部として渡されるオブジェクトを作成します。Sort
ほとんどの検索メソッドには、インスタンスを受け入れるオーバーロードがあります。
独自の「GROUP BY」ロジックを実装する場合、結果を正しいフィールドに「ORDERED BY」することが最初のステップとして役立ちます。