我阅读了同一问题的所有答案,但对于我的用例应该使用哪一个以及为什么使用这一点并不清楚。两者都返回相同的结果。我知道“FilterQuery 将被缓存,从而使整体查询时间更快”,就像有人正确回答一样。
我也明白“过滤还允许标记方面,因此您可以标记方面以包括为您的查询返回的所有方面”,就像其他人也正确回答一样。
我不明白阅读这篇文章的原因是为什么有人会使用 Q,因为根据我看过的所有答案和书籍,FQ 似乎要好得多。
除了,我敢肯定两者都存在可能是有原因的。
我想要找出最适合我的用例的方法——文档中非常缺乏有用的示例。
- 我的文档有:日期、客户、报告和其他一些字段
- 1 个营业日期 = 350 万份文件。
- 文档总数为 2.5 亿并且还在增加(60 个日期 * 8000 个客户 * 1000 个报告)
- 我对日期、客户、报告进行分面,并且我确实使用分面标记。
- UI 整体看起来像任何电子商务网站,例如:亚马逊,左侧有多个方面。
- 不使用评分。
业务规则 #1:日期必须始终出现在每个查询中。
业务规则 #2:99% 的查询将使用最新日期,但随机客户端和随机报告。
事实:我们确定是分面速度较慢,而不是搜索。
问题:
给定这个搜索条件,以及编写查询的这些方法:
A) q=date:20130214 AND client:Joe & facet.field=date & facet.field=client...
B) q=date:20130214 & fq=client:Joe & facet.field=date & facet.field=client...
C) q=client:Joe & fq= date:20130214 & facet.field=date & facet.field=client...
D) q=*:* & fq=date:20130214 & fq=client:Joe & facet.field=date & facet.field=client...
- 您认为以上哪一项是最好的,为什么?请记住,大多数查询将针对 20130214 运行
- 在 FQ 过滤中首先完成,然后应用 Q 条件,还是相反?
今天,我在所有情况下都使用了 D),但我怀疑这是错误的,并导致 Solr(版本 3.6)中的 OOM。
谢谢您的帮助!