【问题标题】:Solr warming query for filter cache过滤器缓存的 Solr 预热查询
【发布时间】:2013-11-11 15:53:14
【问题描述】:

所以我读到了这个: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...

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

【问题讨论】:

  • 看起来这是在说它被 FQ 字段缓存......因此使用这个“OR”逻辑我必须创建排列并对每个排列运行查询以进行加热否则结果集将不会被缓存或无法利用。

标签: solr lucene solr4


【解决方案1】:

https://wiki.apache.org/solr/CommonQueryParameters#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 参数使用散列,所以最好先对值进行排序,然后形成过滤器查询。

【讨论】:

  • 很好解释,但是如果我想像原来的问题一样为集合联合查询预热 Solr 怎么办?
  • 如果它是您要用于过滤查询的同一组值,那么只需对您的值进行排序并使用fq=format:(1 OR 2 OR 3)。这将在您的过滤器缓存中为这三个值的并集创建一个条目。每个后续查询也应该以相同的排序顺序发出值。
猜你喜欢
  • 1970-01-01
  • 2014-12-23
  • 2020-07-18
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
  • 1970-01-01
  • 2013-12-27
  • 1970-01-01
相关资源
最近更新 更多