Solr加热查询过滤器缓存

时间:2013-10-31 15:01:59

标签: solr lucene solr4

所以我读到了这个:http://wiki.apache.org/solr/SolrCaching#filterCache

,具体而言

  

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

所以我的问题是这个。让我们说我的应用程序过滤一组不同的格式ID。如果格式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>
...

是否会热身并帮助我的所有查询尝试按这些格式的各种排列进行过滤,或者只是那些搜索该排列的人?

我是否应该创建5个单独的加温查询(每种格式1个)以利用“设置交集”?

或者该查询是否会为每种格式创建集合?

示例查询

...fq=format:(1)+OR+format:(2)...
...fq=format:(1)+OR+format:(3)...
...fq=format:(2)+OR+format:(3)...
...fq=format:(2)+OR+format:(5)...
etc...

所以我认为没有人会使用上面列出的加温查询创建的过滤器缓存。

1 个答案:

答案 0 :(得分:2)

https://wiki.apache.org/solr/CommonQueryParameters#fq。它说:

  

每个过滤器查询的文档集都是独立缓存的。   因此,关于前面的例子:使用包含两个的单个fq   强制性条款,如果这些条款经常出现在一起,并使用两个   如果它们相对独立,则将fq params分开。

在查询中指定的每个fq参数是一个缓存条目。

你没有与OR进行集合交集;你正在做联合会。但如果你正在做集合交叉:

fq=format:(1 AND 2 AND 3 AND 4 AND 5)

(假设format这里是一个多值字段)并且具有这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 param使用散列,所以最好先排序值,然后再形成过滤查询。 / p>