首页 文章

solr主查询vs fq

提问于
浏览
12

我阅读了同一个问题的所有答案,并且我不清楚哪个应该用于我的用例以及为什么 . 两者都返回相同的结果 . 我理解“FilterQuery将被缓存,使整个查询时间更快”,就像有人正确回答一样 .

我也理解“过滤也允许对构面进行标记,因此您可以标记构面以包括为查询返回的所有构面”,就像其他人也正确回答一样 .

我不明白读这个,为什么然后任何人都会使用Q,因为基于我看到的所有答案和书籍,FQ似乎好得多 .

除此之外,我确信可能存在这两个原因 .

我想要的是弄清楚什么是最适合我的用例 - 文档中非常缺乏有用的示例 .

  • 我的文档有:日期,客户,报告和其他一些字段

  • 1个营业日= 350万份文件 .

  • 文件总数为2.5亿,计数(60个日期* 8000个客户* 1000个报告)

  • 我在日期,客户,报告方面,我确实使用了facet标记 .

  • UI整体看起来像任何电子商务网站,例如:亚马逊,左边有分面 .

  • 未使用评分 .

业务规则#1:日期必须始终存在于每个查询中 .

业务规则#2:99%的查询将使用最新日期,但RANDOM客户端和随机报告 .

事实:我们认为这是一个缓慢而不是搜索的方面 .

问题:

鉴于此搜索条件,以及这些编写查询的方法:
A)q =日期:20130214 AND客户:Joe&facet.field = date&facet.field = client ... B)q = date:20130214&fq = client:Joe&facet.field = date&facet.field =客户... C)q =客户: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 .

谢谢您的帮助!

2 回答

  • 3

    q query是Request的主要查询 .
    它是允许您实际搜索多个字段的那个 .
    q查询将决定每个文档具有什么分数,因此将参与相关性计算 .

    q=*:* 将返回具有相同分数的所有文档 .

    fq 是用于过滤文档的过滤器查询,与搜索无关 .
    因此,如果您有任何要筛选的修正值,则应使用过滤器来限制结果 .
    fq不影响结果的评分 .
    在过滤时,Solr使用过滤器缓存,以增强后续过滤器查询的性能 .

    理想情况下,您应该检查需求的要求,如果要搜索,则应始终使用 q ,如果要过滤/限制结果,则应使用 fq .

    方面只是结果的插件,不会影响您的结果 .

  • 19

    回答你的问题:

    • 根据您的业务规则,我建议您将日期放在fq值中,因为您始终通过日期值限制(过滤)结果,并且听起来Solr可以重复使用日期值 . Q可以包含随机客户端的搜索和必要的报告值 .

    • 当用户第一次进入用户界面时,由于您只显示方面,我建议您使用 q=<id field>:* ,其中 <id field> 是索引中的文档ID,并设置 rows=0 . 再次使用fq值中的日期限制 . 指定 rows=0 将生成仅限构面查询,引用Solr - Getting facet counts without returning results

相关问题