在solr中使facet计数为0

时间:2012-04-09 06:44:42

标签: solr faceted-search

我在我的应用程序中使用带有分面的solr搜索。我的用例是这样一种方式,即datadir中的索引文件不断变化。

问题在于,当我基于某个特定领域时。我从以前在数据目录中(当前不存在)的索引中获取值。但是它们返回的值为0.我不明白以前索引的值在哪里持久存在并在完全新的搜索过程中返回?

虽然我可以简单地跳过计数为0的方面,但我知道这会严重影响我的可扩展性。任何指针都不包括以前搜索者的方面?

[编辑1]:我正在使用的当前解决方法是在我的网址中添加facet.mincount=1。但是,我想这可能会超过我的表现。

2 个答案:

答案 0 :(得分:1)

我找不到评论选项&我没有足够的声誉来投票! 我有同样的问题。 我们正在使用solr 4.2进行原子更新。

我在这里找到了一些解释:http://collab.sakaiproject.org/pipermail/oae-dev/2011-November/000693.html

摘录:

  

为了有效地处理多值字段(如标签)的构面,Solr   建立一个“未转换的索引”(你认为它只是被称为   “索引”,但我认为这更令人困惑),即地图   内部文档ID包含在它们包含的术语列表中。计算   来自这个数据结构的方面只需要遍历每个方面   结果集中的文档,查找其中包含的术语   未反转的索引,并将它们添加到所有文档的计数器中。

     

然而,这里有一个偷偷摸摸的优化导致零   我们看到了。对于出现超过5%的条款   文件中,Solr不将它们包含在未转换的索引中(离开   它们有助于保持内存中的大小,我想),而是   使用针对的常规查询来获取这些术语的计数   Lucene指数。由于这套“共同”术语并非特定于您的   结果集,因为任何给定的结果集都不一定包含   所有这些术语,你可以得到零的数量。

它可能不是来自旧的索引值,而只是存在于超过5%的文档中的术语?

答案 1 :(得分:1)

我认为facet.mincount=n不是解决方法,您应该使用它来获取非负面方面的数量。

solrQuery.setQuery("*:*");
solrQuery.addFacetField("foobar");
solrQuery.setFacetMinCount(1);