gpt4 book ai didi

java - 分面搜索中的自动深入分析

转载 作者:太空宇宙 更新时间:2023-11-04 08:08:49 24 4
gpt4 key购买 nike

问题简介

我使用 Apache 的 Lucene for java,我想知道如何在分面搜索中自动向下钻取。更准确地说,我想根据给定的分类级别,获取该级别的各个方面。例如,如果我使用开放目录项目作为分类法,并且在级别 2 上查找“剧院”,我想在分类法中深入挖掘,采用更重要的路径。在本例中:艺术->表演艺术。这样我就可以对 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,我只会获得第一级的结果。

解决方案是首先获取第一级的结果,将具有最大权重的类别添加到路径中,然后执行新的分面搜索,依此类推。但这是非常低效的!

谢谢!

最佳答案

实际上你不只是获得第一个级别,lucene返回所有级别,但你需要使用getSubResults方法从facetCollector结果中获取它们。实际上可以通过这种方式获得类别路径中的所有级别。除非您想提供对整个集合的深入了解,否则使用 MatchAllDocs 并不是那么好。使用多收集器并提供一些查询或过滤时间来限制您的结果可能更合适。

使用下面的代码片段,您可以循环遍历所有结果和所有子结果以查找您要查找的类别路径,然后对第一个查询使用 DrillDown 查询

例如:

for (FacetResult res : fc.getFacetResults()){
//this is the top lvl facet
FacetResultNode toplvl = res.getFacetResultNode();
System.out.println(toplvl.getLabel() + " (" + toplvl.getValue() + ")");
for (FaceResultNode secondlvl : toplvl.getSubResults()) {
//second lvl facet categories
System.out.println(" " + secondlvl.getLabel().getComponent(1)
+ " (" + secondlvl.getValue() + ")");
}
}
//your orginal query 'q' + the your cat
Query q2 = DrillDown.query(indexingParams, q, cat);

关于java - 分面搜索中的自动深入分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11613551/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com