假设其本身如下:
- q=foo 返回 200 万结果
- 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 进行这样的大型计算时我可能没有意识到。最后的结果是一样的,但是各自的优缺点是什么?
最佳答案
查询 A:q=foo&fq=type:SalesOrder&fq=refId:12345
如果您想限制过滤器中的结果数量,而不是搜索字段,则应使用过滤器查询。
fq - 提供可选的过滤查询。查询结果仅限于搜索过滤器查询返回的结果。 Filtered queries are cached by Solr 。它们对于提高复杂查询的速度非常有用。
如果您的情况似乎是您想要过滤掉类型为 SalesOrder 且 refid 12345 的结果,则过滤查询似乎是正确的,而不是在查询 q 参数中使用它们。
关于java - 两个 Solr 查询的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7747196/