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
过滤器缓存的Solr查询_Solr_Lucene_Solr4 - Fatal编程技术网

过滤器缓存的Solr查询

过滤器缓存的Solr查询,solr,lucene,solr4,Solr,Lucene,Solr4,所以我读到: 特别是 筛选器缓存存储任何筛选器查询的结果(“fq” 参数),明确要求Solr执行。(每个过滤器都是 分别执行和缓存。当需要使用它们来限制 查询返回的结果数,这是使用set完成的 交叉点。) 所以我的问题是。假设我的应用程序在一组不同的FormatSID上进行过滤。如果格式ID为数字,则表示1,2,3,4,5。而且,在查询中有许多作为fq参数发送的排列 如果我写了这样一个温暖的问题 ... <str name="fq">format:(1)+OR+format:(2)+

所以我读到:

特别是

筛选器缓存存储任何筛选器查询的结果(“fq” 参数),明确要求Solr执行。(每个过滤器都是 分别执行和缓存。当需要使用它们来限制 查询返回的结果数,这是使用set完成的 交叉点。)

所以我的问题是。假设我的应用程序在一组不同的FormatSID上进行过滤。如果格式ID为数字,则表示1,2,3,4,5。而且,在查询中有许多作为fq参数发送的排列

如果我写了这样一个温暖的问题

...
<str name="fq">format:(1)+OR+format:(2)+OR+format:(3)+OR+format:(4)+OR+format:(5)</str>
...
因此,我认为没有人会使用上面列出的查询创建的过滤器缓存。

请参阅。它说:

每个筛选查询中的文档集都是独立缓存的。 因此,关于前面的示例:使用一个包含两个 如果这些条款经常同时出现,则使用两个 如果fq参数相对独立,则将它们分开

它是查询中指定的每个
fq
param的一个缓存项

您没有设置与或的交点;你正在做一个固定的联盟。但如果你在做如下设置:

fq=format:(1 AND 2 AND 3 AND 4 AND 5)
(假设
格式
在这里是一个多值字段)并具有这5个值的不同子集,如

fq=format:(1 AND 2)
fq=format:(3 AND 4 AND 5)
然后发出单独的筛选器查询,如:

fq=format:1&fq=format:2&fq=format:3&fq=format:4&fq=format:5
将帮助所有子集查询。在这里,过滤器缓存中有5个条目,它们与所有子集相交


关于排列,即值在筛选器查询中的显示顺序,我相信它将对
fq
参数使用哈希,因此您最好先对值进行排序,然后形成筛选器查询。

这似乎是说它由fq字段缓存。。。因此,使用这个“或”逻辑,我必须创建排列,并对每个排列运行一个查询,以进行预热,否则结果集将无法缓存或利用。非常好地解释,但是如果我想像原来的问题一样为集合联合查询预热Solr,那该怎么办呢?如果它是您将用于筛选查询的同一组值,那么只需对您的值进行排序,并使用类似
fq=format:(1或2或3)
。这将在过滤器缓存中为这三个值的并集创建一个条目。每个后续查询还应以相同的排序顺序发出值。
fq=format:1&fq=format:2&fq=format:3&fq=format:4&fq=format:5