我在我的一个项目中偶然发现了使用Lucene.net的问题,其中我正在使用SimpleFacetedSearch功能进行多面搜索。
我抛出异常
构面数量超过2048
我有一个3列,我会在添加另一个方面时将其刻面,但我得到了例外。
如果我删除所有其他构面,则新构面将起作用。
深入研究SimpleFacetedSearch的源代码,我可以看到在SimpleFacetedSearch的构造函数中,它正在检查构面的数量不超过MAX_FACETS,该常数设置为2048。
foreach (string field in groupByFields)
{
...
num *= fieldValuesBitSets1.FieldValueBitSetPair.Count;
if (num > SimpleFacetedSearch.MAX_FACETS)
throw new Exception("Facet count exceeded " + (object) SimpleFacetedSearch.MAX_FACETS);
fieldValuesBitSets.Add(fieldValuesBitSets1);
...
}
但是,由于它是公开的,所以我可以这样设置。
SimpleFacetedSearch.MAX_FACETS = int.MaxValue;
有谁知道为什么将它设置为2048,以及是否有更改它的问题?我找不到任何文档。
最佳答案
没有,更改它应该没有任何问题。但是请记住,当搜索结果很大但构面数不超过一定数目时,使用Bitsets
(内部由SimpleFacetedSearch
完成)会更有效。 (说1000个构面1000万次点击)
如果您有更多方面,但搜索结果不大,则可以在收集器中迭代结果并创建方面。这样,您可能会获得更好的性能。 (例如100K方面1000次点击)
因此,2048可能是一个优化的数字,超过该数字可能会导致性能下降。
关于lucene - Lucene SimpleFacetedSearch构面数量超过2048,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9521503/