如果我有很多搜索选择不同地址的请求,是否可以使用通配符选择查询,在查询相关的侦听器设置中选择所有要预热的地址?我想缓存所有地址,以使后续对单独地址的查询更快。还是无法使用通配符进行缓存?
<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>
答案 0 :(得分:1)
查询address:*
检索字段地址中具有非空值的所有文档,但这对Solr的过滤器缓存没有多大用处,因为后续命中仅匹配通配符作为过滤器。
您需要加载地址字段实际与精确值匹配的文档,在这种情况下,通配符将被视为过滤器缓存的唯一过滤器,而不是cacthall。
所以并不是说缓存通配符查询不起作用,而是如您期望的那样,它不会预热缓存,这是针对字段中的所有不同值(可能是有用,但可以想象加热通配符查询的成本)。
相反,您可能必须使用过滤器查询,每个过滤器查询都与整个文档集相交(这始终意味着您要应用fq的主通配符查询q=*:*
),并在每种可能的情况下使用一个fq
字段中的值(如果不受限制,则为每个最常提交的值),这将按地址加载文档的每个子集,这实际上意味着预热每个文档的过滤器缓存。
https://lucene.apache.org/solr/guide/7_3/query-settings-in-solrconfig.html#filtercache