2014-09-26 36 views
2

我試圖通過使用添加到Lucene 2.9.4的SimpleFacetedSearch示例來實現多面搜索,並且我想知道是否可以在Lucene.NET中獲得所有構面使用SimpleFacetedSearch?使用SimpleFacetedSearch獲取lucene.net中的所有構面

說,例如我有三列索引

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

根據我對SimpleFacetedSearch的理解,我必須解析一個查詢,將它傳遞給SimpleFacetedSearch,然後搜索它 - 這隻會得到與解析查詢相匹配的構面。

但我想要所有方面而不必解析查詢:即索引中所有可能方面的方面計數。

說,在上面表I中要輸出作爲

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

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

總之,我不想解析任何查詢,並希望返回整個索引的所有方面。 謝謝

回答

1

您可以使用MatchAllDocsQuery查詢,因此您將創建查詢爲Query query = new MatchAllDocsQuery()。然後您只需撥打搜索並傳遞該查詢。您不必解析它,因爲這是Lucene查詢API的一部分,您只能在查詢來自用戶時解析查詢。基本上,當你的查詢由用戶生成時使用QueryParser,但是當你想以編程的方式生成查詢時,使用查詢API添加條款,我認爲他們在SFS的示例代碼中沒有很好地教導這個問題。

請記住,最大值是在SimpleFacetedSearch中設置的,主要是MAXFACETS = 2048,這意味着如果您有超過2048個facet組合存在,則會引發異常。如果需要,您可以調整此值,但請記住,分面是一項昂貴的操作,您將通過經歷許多方面來增加搜索時間。

我不確定你是否明白你給出的例子。樣本輸出將是{(F1,E1) - 2,(F2,E2) - 2,(F3,E3) - 1},其中集合與破折號後面的數字一起用括號括起來。

相關問題