1

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

特别是

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

所以我的问题是这个。假设我的应用过滤了一组不同的格式 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...

所以我相信没有一个会使用上面列出的预热查询创建的过滤器缓存。

4

1 回答 1

2

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

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

它是查询中指定的每个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参数,所以你最好先对值进行排序,然后再形成你的过滤器查询。

于 2013-10-31T17:42:32.070 回答