java - 两个 Solr 查询的比较

标签 java performance memory-management lucene solr

假设其本身如下:

  • 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/

相关文章:

objective-c - 我可以创建自己的内存管理来处理 Cocoa 对象吗

c++ - c++中分配器和内置数组的区别?

java - 服务器没有启动是因为将 PrimeFaces 从 4.0.x 升级到 5.2?

java - 调试Java获取对象和局部变量列表

regex - 从 perl 5.8(32 位)升级到 5.16(64 位)- 正则表达式性能受到影响

Android:低 FPS 在表面 View 中绘制许多位图

java - mapreduce 中永无止境的工作

java - 使用参数构建多个对象并将它们传递给要添加到列表中的更多对象的最有效方法

c++ - #include guard 在评论 block 之前还是之后?

c++ - STL 容器的元素生命周期