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

Solr 4.5: When is Solr facet query better than simple query?

我正在使用 Apache Solr 并希望获得有关某些查询选项的更多详细信息。我发现了分面查询并想知道,它们究竟在什么时候带来了重要的优势;特别是在以下示例的情况下:

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

问题是:
a) 你应该简单地用当前图书的 ISBN 查询 Solr 并检查总结果,或者
b) 您是否应该发送带有 f.isbn.facet.mincount=2 的分面查询并检查结果是否包含当前图书的 ISBN?

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

如果您要进行查询 - 进行查询。 Lucene 针对查询进行了高度优化,因此这就是您应该做的。构面查询用于从任意查询创建构面(计数)——所以在内部它做同样的事情。如果您生成一个构面然后遍历该构面,与仅查询一个值相比,Lucene 必须查看更多的文档。

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