问题简介
我使用 Apache 的 Lucene for java,我想知道如何在多面搜索中自动向下钻取。更准确地说,我想,给定一个分类级别,得到那个级别的各个方面。例如,如果我将 Open Directory 项目用作分类法,并且我在第 2 级寻找剧院,我想在分类法中下钻,采用更重要的路径。在这种情况下:艺术->表演艺术。这样我就可以对 perform_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,我只会得到第一级的结果。
一个解决方案是首先获取第一级的结果,将具有最大权重的类别添加到路径中,然后执行新的分面搜索等等。但这非常低效!
谢谢!