5

我在我的应用程序中使用带有分面的 solr 搜索。我的用例是datadir中的索引文件不断变化。

问题是,当我基于特定领域进行分面时。我从以前在数据目录中的索引中获取值(并且当前不存在)。但是它们的返回值为 0。我不明白以前索引中的值在哪里保留并在全新的搜索期间返回?

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

[编辑 1]:我正在使用的当前解决方法是facet.mincount=1在我的 URL 中添加一个。但是,我想这会影响我的表现。

4

2 回答 2

3

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

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

摘抄:

为了有效地处理多值字段(如标签)的方面,Solr 构建了一个“未倒排索引”(您认为它只会被称为“索引”,但我想这更令人困惑),它将内部文档 ID 映射到它们包含的术语列表。从这个数据结构计算方面只需要遍历结果集中的每个文档,在未倒排索引中查找它包含的术语,并将它们添加到所有文档的计数中。

但是,这里有一个偷偷摸摸的优化,导致我们看到的计数为零。对于出现在超过 5% 文档中的术语,Solr 不会将它们包含在未倒排索引中(我猜,将它们排除在外有助于降低内存大小),而是使用常规获取这些术语的计数查询 Lucene 索引。由于“通用”术语集并不特定于您的结果集,并且由于任何给定的结果集不一定包含所有这些术语,因此您可以获得零计数。

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

于 2013-07-12T16:50:23.657 回答
2

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

solrQuery.setQuery("*:*");
solrQuery.addFacetField("foobar");
solrQuery.setFacetMinCount(1);
于 2017-02-07T07:00:09.807 回答