假设自己以下:
默认运算符是OR。
如果用户将进行许多查询,例如我在下面列出的内容:
即,
或
我想用哪个?我知道个别fq将被缓存,但我想知道Solr将在内存中做什么,或者当Solr做这样的大型计算时我可能不会注意到什么。最后,结果是一样的,但各自的优点和缺点是什么?
答案 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)也许?)并使用另外两个参数作为过滤器