使用SimpleFacetedSearch获取lucene.net中的所有方面

时间:2014-09-26 21:17:15

标签: lucene.net facet faceted-search

我正在尝试使用添加到Lucene 2.9.4的SimpleFacetedSearch示例来实现分面搜索,我想知道是否可以使用SimpleFacetedSearch获取Lucene.NET中的所有方面?

比如说我有三列索引

ID A B
1 | F1 | E1
2 | F2 | E2
3 | F1 | E1
4 | F3 | E3
5 | F2 | E2

根据我对SimpleFacetedSearch的理解,我必须解析一个查询,将它传递给SimpleFacetedSearch然后搜索它 - 这只会得到与解析查询匹配的方面。

但我想要所有方面而不必解析查询:也就是说,索引中所有可能方面的方面都是计数。

在上表中说我希望输出为

A = F1(2),F2(2),F3(1)

B = E1(2),E2(2),E3(1)

简而言之,我不想解析任何查询,并希望为整个索引返回所有方面。 感谢

1 个答案:

答案 0 :(得分:1)

您可以使用MatchAllDocsQuery查询,因此您可以将 Query query = new MatchAllDocsQuery()创建为查询。然后,您只需调用搜索并传递该查询。您不必解析它,因为这是Lucene的查询API的一部分,您只能在来自用户时解析查询。基本上,当您的查询由用户生成时使用QueryParser,但是当您想以编程方式生成查询时使用查询API添加术语,我认为他们在SFS的示例代码中没有做好教学。

请记住,最大值是在SimpleFacetedSearch中设置的,主要是MAXFACETS = 2048,这意味着如果您有超过2048个构面组合,则会抛出异常。如果需要,您可以调整此值,但请记住,分面是一项昂贵的操作,您将通过这么多方面来增加搜索时间。

我不确定你是否理解你所给出的例子。样本输出为{(F1,E1) - 2,(F2,E2) - 2,(F3,E3) - 1},其中集合在括号中,并带有破折号后的计数。