5.2.4. 結果の理解

結果がクエリに表れたり、表れなかったりして不思議に思うことがあるかもしれません。Luke はこのことについて理解するのに優れたツールです。ただし、Hibernate Search は該当する結果に対して Lucene Explanation オブジェクトへのアクセスを提供します (該当するクエリで)。このクラスは Lucene ユーザーにとっては非常に高度なものですが、オブジェクトのスコアを理解するのに役に立ちます。該当する結果の Explanation オブジェクトにアクセスするには 2 つの方法があります。
  • fullTextQuery.explain(int) メソッドを使用
  • プロジェクションを使用
最初の方法では、ドキュメント id をパラメータとして取得し、Explanation オブジェクトを返します。ドキュメント id はプロジェクションと FullTextQuery.DOCUMENT_ID 定数を使用して取得できます。

警告

ドキュメント id はエンティティ id とは関係ありません。これらの 2 つを混同しないでください。
2 つ目の方法では、FullTextQuery.EXPLANATION 定数を使用して Explanation オブジェクトを予測します。

例5.13 プロジェクションを使用して Lucene Explanation オブジェクトを取得

FullTextQuery ftQuery = s.createFullTextQuery( luceneQuery, Dvd.class )
        .setProjection( FullTextQuery.DOCUMENT_ID, FullTextQuery.EXPLANATION, FullTextQuery.THIS );
@SuppressWarnings("unchecked") List<Object[]> results = ftQuery.list();
for (Object[] result : results) {
    Explanation e = (Explanation) result[1];
    System.out.println( e.toString() );
}
Explanation オブジェクトの構築は非常にコストがかかることに注意してください。このコストは大体 Lucene クエリを再び実行するコストと同じです。Explanation オブジェクトが必要ない場合はこの作業を行わないでください。