在与Solr查询相关的侦听器配置中指定的查询的精确度如何?

时间:2019-05-17 11:33:03

标签: solr

如果我有很多搜索选择不同地址的请求,是否可以使用通配符选择查询,在查询相关的侦听器设置中选择所有要预热的地址?我想缓存所有地址,以使后续对单独地址的查询更快。还是无法使用通配符进行缓存?

<listener event="newSearcher" class="solr.QuerySenderListener">
          <arr name="queries">
              <lst>
                  <str name="q">address:*</str>
                  <str name="rows">10000</str>
              </lst>
          </arr>
</listener>

<listener event="firstSearcher" class="solr.QuerySenderListener">
          <arr name="queries">
              <lst>
                  <str name="q">address:*</str>
                  <str name="rows">10000</str>
              </lst>
          </arr>
</listener>

1 个答案:

答案 0 :(得分:1)

查询address:*检索字段地址中具有非空值的所有文档,但这对Solr的过滤器缓存没有多大用处,因为后续命中仅匹配通配符作为过滤器。

您需要加载地址字段实际与精确值匹配的文档,在这种情况下,通配符将被视为过滤器缓存的唯一过滤器,而不是cacthall。

所以并不是说缓存通配符查询不起作用,而是如您期望的那样,它不会预热缓存,这是针对字段中的所有不同值(可能是有用,但可以想象加热通配符查询的成本)。

相反,您可能必须使用过滤器查询,每个过滤器查询都与整个文档集相交(这始终意味着您要应用fq的主通配符查询q=*:*),并在每种可能的情况下使用一个fq字段中的值(如果不受限制,则为每个最常提交的值),这将按地址加载文档的每个子集,这实际上意味着预热每个文档的过滤器缓存。

https://lucene.apache.org/solr/guide/7_3/query-settings-in-solrconfig.html#filtercache