Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
solr主查询与fq_Solr - Fatal编程技术网

solr主查询与fq

solr主查询与fq,solr,Solr,我阅读了同一个问题的所有答案,但不清楚我应该在我的用例中使用哪一个以及为什么。 两者都返回相同的结果。 我知道“FilterQuery将被缓存,从而使整个查询时间更快”,就像有人正确回答的那样 我也理解“过滤也允许标记facet,因此您可以标记facet以包括为您的查询返回的所有facet”,就像其他人也正确回答的那样 阅读本文我不明白的是,为什么会有人使用Q,因为根据我所看到的所有答案和书籍,FQ似乎要好得多 除此之外,我相信两者都存在可能是有原因的 我想要的是找出什么最适合我的用例——文档中

我阅读了同一个问题的所有答案,但不清楚我应该在我的用例中使用哪一个以及为什么。 两者都返回相同的结果。 我知道“FilterQuery将被缓存,从而使整个查询时间更快”,就像有人正确回答的那样

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

阅读本文我不明白的是,为什么会有人使用Q,因为根据我所看到的所有答案和书籍,FQ似乎要好得多

除此之外,我相信两者都存在可能是有原因的

我想要的是找出什么最适合我的用例——文档中非常缺乏有用的示例

  • 我的文档有:日期、客户、报告和其他一些字段
  • 1个营业日期=350万份文件
  • 文件总数为2.5亿份(60个日期*8000个客户*1000份报告)
  • 我在日期、客户、报告上使用刻面,并且我确实使用刻面标记
  • 整个UI看起来像任何电子商务网站,例如:亚马逊,左侧有刻面
  • 不使用评分
业务规则#1:日期必须始终存在于每个查询中

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

一个事实:我们确定是刻面速度慢,而不是搜索

问题:

给定此搜索条件,以及以下编写查询的方法:

A) q=日期:20130214,客户:Joe&facet.field=日期&facet.field=客户

B) q=日期:20130214&fq=客户:Joe&facet.field=日期&facet.field=客户

C) q=客户:乔&fq=日期:20130214&facet.field=日期&facet.field=客户

D) q=*:*&fq=date:20130214&fq=client:Joe&facet.field=date&facet.field=client。。。

  • 你认为以上哪一项最好?为什么?请记住,大多数查询将针对20130214运行
  • 在FQ中,先进行过滤,然后应用Q条件,还是反过来
今天,我已经在所有情况下使用了D),但我怀疑这是错误的,并导致Solr(3.6版)中出现OOM


谢谢你的帮助

要回答您的问题:

  • 根据您的业务规则,我建议您将日期放在fq值中,因为您总是通过日期值限制(过滤)结果,而且听起来日期值可以被Solr重用。Q可以根据需要包含对随机客户端和报告值的搜索

  • 当用户第一次来到UI时,由于您只显示方面,我建议您使用
    q=:*
    ,其中
    是索引中的文档id,并设置
    行=0
    。再次在fq值中使用日期限制。指定
    rows=0
    将生成一个仅面向方面的查询,即reference


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?如果前者有效,则