1

問題の紹介

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 に設定すると、最初のレベルの結果のみが得られます。

解決策は、最初のレベルの結果を最初に取得し、最大の重みを持つカテゴリをパスに追加してから、新しいファセット検索を実行することです。しかし、それは非常に非効率的です!

ありがとうございました!

4

1 に答える 1