两个Solr查询的比较

时间:2011-10-12 22:09:58

标签: java performance memory-management lucene solr

假设自己以下:

  • q = foo 返回两百万条结果
  • q = type:SalesOrder 返回300,000条结果
  • q = refId:12345 返回2,000条结果

默认运算符是OR。

如果用户将进行许多查询,例如我在下面列出的内容:

即,

  • 查询A: q = foo& fq = type:SalesOrder& fq = refId:12345

  • 查询B: q =(foo AND type:SalesOrder AND refId:12345)

我想用哪个?我知道个别fq将被缓存,但我想知道Solr将在内存中做什么,或者当Solr做这样的大型计算时我可能不会注意到什么。最后,结果是一样的,但各自的优点和缺点是什么?

2 个答案:

答案 0 :(得分:2)

查询A:q = foo& fq = type:SalesOrder& fq = refId:12345

如果您想限制过滤器中的结果数量而不是搜索字段,则应使用过滤器查询。

fq - 提供可选的过滤查询。查询结果仅限于搜索过滤器查询返回的结果。 Filtered queries are cached by Solr。它们对于提高复杂查询的速度非常有用。

如果您的情况似乎要过滤掉类型为SalesOrder和refid 12345的结果,则过滤查询似乎正确,而不是在查询q参数中使用它们。

答案 1 :(得分:0)

查询A:你有第一个结果集" foo"正在过滤

查询B:您有三个计算交集的结果集。

所以如果"输入:SalesOrder"例如,给出了一个巨大的结果集,queryA将更加高效。

如果查询不是带有分析器的纯文本,但它是一个ID(例如:shop:1234),那么最有效的方法是使用给出最小结果集的查询(q = refId:12345)也许?)并使用另外两个参数作为过滤器