solr主查询与fq
我阅读了同一个问题的所有答案,但不清楚我应该在我的用例中使用哪一个以及为什么。 两者都返回相同的结果。 我知道“FilterQuery将被缓存,从而使整个查询时间更快”,就像有人正确回答的那样 我也理解“过滤也允许标记facet,因此您可以标记facet以包括为您的查询返回的所有facet”,就像其他人也正确回答的那样 阅读本文我不明白的是,为什么会有人使用Q,因为根据我所看到的所有答案和书籍,FQ似乎要好得多 除此之外,我相信两者都存在可能是有原因的 我想要的是找出什么最适合我的用例——文档中非常缺乏有用的示例solr主查询与fq,solr,Solr,我阅读了同一个问题的所有答案,但不清楚我应该在我的用例中使用哪一个以及为什么。 两者都返回相同的结果。 我知道“FilterQuery将被缓存,从而使整个查询时间更快”,就像有人正确回答的那样 我也理解“过滤也允许标记facet,因此您可以标记facet以包括为您的查询返回的所有facet”,就像其他人也正确回答的那样 阅读本文我不明白的是,为什么会有人使用Q,因为根据我所看到的所有答案和书籍,FQ似乎要好得多 除此之外,我相信两者都存在可能是有原因的 我想要的是找出什么最适合我的用例——文档中
- 我的文档有:日期、客户、报告和其他一些字段
- 1个营业日期=350万份文件
- 文件总数为2.5亿份(60个日期*8000个客户*1000份报告)
- 我在日期、客户、报告上使用刻面,并且我确实使用刻面标记
- 整个UI看起来像任何电子商务网站,例如:亚马逊,左侧有刻面
- 不使用评分
- 你认为以上哪一项最好?为什么?请记住,大多数查询将针对20130214运行
- 在FQ中,先进行过滤,然后应用Q条件,还是反过来
谢谢你的帮助 要回答您的问题:
- 根据您的业务规则,我建议您将日期放在fq值中,因为您总是通过日期值限制(过滤)结果,而且听起来日期值可以被Solr重用。Q可以根据需要包含对随机客户端和报告值的搜索
- 当用户第一次来到UI时,由于您只显示方面,我建议您使用
,其中q=:*
是索引中的文档id,并设置
。再次在fq值中使用日期限制。指定行=0
将生成一个仅面向方面的查询,即referencerows=0
q
查询是请求的主要查询。它允许您实际搜索多个字段。
q
query将决定每个文档的分数,从而参与相关性计算
q=*:*
将返回所有分数相同的文档
fq
是用于筛选文档的筛选查询,与搜索无关。因此,如果您有任何要过滤的固定值,则应使用过滤器限制结果。
fq
不影响结果评分。过滤时,Solr使用过滤器缓存来增强后续过滤器查询的性能 因此,理想情况下,您应该检查需求需要什么。如果要搜索,应始终使用
q
,如果要筛选/限制结果,应使用fq
方面只是结果的附加内容,不会影响您的结果。谢谢您的回复。如果我说fq=20130214&q=client:Paige,这是否意味着Solr必须首先扫描2.5亿份client:Paige文档,然后过滤它们,只保留日期为20130214的文档?如果是这样的话,首先查找日期(350万份文档)的所有内容,然后根据客户进行筛选不是更有效吗?还有一个更大的问题:我该怎么说呢?因为似乎没有工具可以尝试这两种情况。是的,过滤查询将在主搜索执行后执行。但是,根据您的文档编号,您可能希望切换它们,并且
q=20130214&fq=client:Paige
正如您所知,您只需要搜索350万个带有日期的文档,然后过滤这些文档,以仅返回正确的客户端。如何确定正确的方法并不难,它取决于需求和场景。至于测试查询的工具,我强烈推荐SolrMeter——谢谢Paige。您在两个不同的答复中的回答不同(基于业务规则和基于数字),因此我澄清了我原来的问题。你能再看看吗。此外,SolrMeter并没有显示Solr如何处理查询—它会以什么样的顺序缓存查询、找到什么,等等。如果您熟悉Sybase(或任何RDBMS),我正在寻找一个与“set showplan on”(设置showplan on)相当的选项,谢谢您,-Dmitry。谢谢您在上面发布所有这些有用的答案!!为什么要投否决票?请添加评论,以便我可以改进我的答案,如果它不再有效@Jayendra基本查询:它总是说fq用于过滤文档,并通过缓存帮助后续搜索。假设我有100万个文档均匀分布在100个类别中。如果我使用一个查询(q)并且fq=cat:5,那么solr会首先只搜索具有该cat:5的文档,还是搜索所有100M,然后过滤掉cat:5?如果前者有效,则