Solr 4.5:Solr facet查询什么时候比简单查询更好?

时间:2016-03-29 12:23:41

标签: solr faceted-search

我正在使用Apache Solr,并希望获得有关某些查询选项的更多详细信息。我发现了各种各样的问题并且想知道,它们确实带来了重要的优势;特别是在以下示例的情况下:

Solr服务器上保存有大量书籍。尽管书应该具有共同的属性,但它们具有ISBN。有关书籍的数据由第三方提供,因此检查系统中没有加倍的ISBN非常重要。为了检查一本书的ISBN是否重复,它必须经过一个路由路径 - 不幸的是 - 每本书都是单独处理的,没有关于前面或后面流程的任何信息。

问题是:
a)您是否应该使用当前书籍ISBN查询Solr并检查总结果,或者 b)您是否应使用f.isbn.facet.mincount=2发送构面查询并检查结果是否包含当前图书ISBN?

在这两种情况下,都无法实现缓存结果。因此查询的数量总是等于处理的书籍数量。我根本不知道Solr是如何工作的,因此如果没有进一步的信息就不能做出这个决定,特别是因为查询的数量不会因上述任何一种可能性而减少。

1 个答案:

答案 0 :(得分:0)

如果您要进行查询 - 请执行查询。 Lucene针对查询进行了高度优化,因此您应该这样做。 facet查询用于从任意查询创建构面(计数) - 因此在内部它执行相同的操作。如果你生成一个facet然后遍历那个facet,那么Lucene必须查看的文档比你查询单个值时要多得多。

获得性能提升的最佳策略是批量执行这些操作 - 检查同一批次中的500本书(即isbn:(123 OR 321 OR 567 OR 765)),然后在代码中处理。如果这些更新可以并行地从许多系统到达,而不需要通过单一来源,那么您必须决定在流中出现任何重复项之前可以花多少时间(这种竞争条件也可能只发生在一本书中,因为两个流可以查询单个isbn并在从两个流中单独添加之前获得否定结果。)