我在我的一个项目中偶然发现了使用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/

10-13 03:28