問題の紹介
Java 用に Apache の Lucene を使用しています。ファセット検索で自動的にドリルダウンする方法を知りたいです。より正確には、分類法のレベルを指定して、そのレベルのファセットを取得したいと考えています。たとえば、オープン ディレクトリ プロジェクトをタオックスノミーとして使用し、レベル 2 のシアターを探している場合、より重みのあるパスを使用してタクソノミーをドリルダウンしたいと考えています。この場合: Arts->performing_arts. このようにして、 Performing_arts 内のカテゴリの事実に基づいた検索を取得します。
問題
私はファセット検索を行うのが得意です。上記の例では、次のようにします。
// 2. Query expansion
IndexSearcher wnSearcher = new IndexSearcher(wnReader);
//Query q = SynLookup.expand(querystr, wnSearcher, analyzer, "Contents", (float) 0.9);
// 3. Query
// the "title" arg specifies the default field to use
// when no field is explicitly specified in the query.
Query q = new QueryParser(Version.LUCENE_36, "Contents", analyzer).parse(querystr);
// 3. search
Query matchAllDocs= new MatchAllDocsQuery();
// Create the facets collector
FacetIndexingParams indexingParams = new DefaultFacetIndexingParams();
FacetSearchParams facetSearchParams = new FacetSearchParams(indexingParams);
CategoryPath top = new CategoryPath("Top/Arts/performing_arts",'/');
FacetRequest neighborhoodFacetRequest = new CountFacetRequest(top, 13);
facetSearchParams.addFacetRequest(neighborhoodFacetRequest);
FacetsCollector fc = new FacetsCollector(facetSearchParams, reader, taxonomyReader);
IndexSearcher searcher = new IndexSearcher(reader);
searcher.search(q, new QueryWrapperFilter(matchAllDocs), fc);
// 4. display results
System.out.println("Results: ");
List<FacetResult> res = fc.getFacetResults();
printFacetResult(res);
ただし、CategoryPath をアプリオリに作成するためのパスを知っている必要があります...そして、結果セット全体を取得して、必要なレベルに到達する方法がわかりません。CategoryPath を Top に設定すると、最初のレベルの結果のみが得られます。
解決策は、最初のレベルの結果を最初に取得し、最大の重みを持つカテゴリをパスに追加してから、新しいファセット検索を実行することです。しかし、それは非常に非効率的です!
ありがとうございました!