1

我有一个 SOLR 查询,其中包含一些 AND/OR 过滤。此过滤是自定义的,本身并不重要。

我想要做的是添加一个子查询以在“_template”等于三个值之一时提供一个助推器值。我试图通过添加子查询来做到这一点,但目标是确保不进行额外的过滤。我想拥有相同的结果集,只需要提供助推器值。

我使用子查询而不使用 Booster Query (bq) 参数执行此操作的原因是,我的查询实际上是使用 Sitecore 的 PredicateBuilder(来自 Sitecore.ContentSearch.Linq,版本 6.0)生成的。下面给出的示例是 SOLR 查询,但这个上下文是我想使用子查询解决它的原因。

查询 1 - 原始查询

这是原始查询。这是我的起点,所以我想“按原样”接受这个查询。它给出了 58 个结果。

?q=((((-_template:(86b04a1523f542b98561e5780328a2ff) *:*) AND (_name:(*searchterm*) OR _name:(searchterm) OR _name:(searchterm*) OR (_name:(*searchterm*))^20 OR (_name:(searchterm~0.8))^20 OR _content:(searchterm~0.8) OR _description_t:(searchterm~0.8) OR type_t:(searchterm~0.8) OR variant_t:(searchterm~0.8)))) )&start=0&rows=99&fl=_template,_title_t_nl,score&fq=_indexname:(customindex)&wt=xml

查询 2 - 添加了子查询

这是原始查询,我在其中添加了一个子查询来匹配三个课程模板 ID 之一,然后给出 35 的提升值。但是,此查询仅给出 36 个结果(因为所有页面都没有在三个给定模板上ID 被完全过滤掉。)

?q=((((-_template:(86b04a1523f542b98561e5780328a2ff) *:*) AND (_name:(*searchterm*) OR _name:(searchterm) OR _name:(searchterm*) OR (_name:(*searchterm*))^20 OR (_name:(searchterm~0.8))^20 OR _content:(searchterm~0.8) OR _description_t:(searchterm~0.8) OR type_t:(searchterm~0.8) OR variant_t:(searchterm~0.8)))) AND ((_template:(3aa541dcf9d3471ba5d79d397b3e793c))^35 OR (_template:(a2f633e201ab473ea3a9962106921d27))^35 OR (_template:(060412222e0a475a9b2c3adc9cb7fb2e))^35))&start=0&rows=99&fl=_template,_title_t_nl,score&fq=_indexname:(customindex)&wt=xml

查询 3 - 试图使子查询只添加助推器值

在此查询中,我添加了添加任何不等于全零的模板的附加情况。我的期望是,这将产生不再过滤掉任何结果的效果,但提升仍然存在。

但是,由于某种原因,它仍然过滤掉了未知模板,只给出了 36 个结果。

?q=((((-_template:(86b04a1523f542b98561e5780328a2ff) *:*) AND (_name:(*searchterm*) OR _name:(searchterm) OR _name:(searchterm*) OR (_name:(*searchterm*))^20 OR (_name:(searchterm~0.8))^20 OR _content:(searchterm~0.8) OR _description_t:(searchterm~0.8) OR type_t:(searchterm~0.8) OR variant_t:(searchterm~0.8)))) AND ((_template:(3aa541dcf9d3471ba5d79d397b3e793c))^35 OR (_template:(a2f633e201ab473ea3a9962106921d27))^35 OR (_template:(060412222e0a475a9b2c3adc9cb7fb2e))^35 OR (-_template:(00000000000000000000000000000000))))&start=0&rows=99&fl=_template,_title_t_nl,score&fq=_indexname:(customindex)&wt=xml

问题是:为什么第三个查询不起作用,我该如何调整它以使其起作用?即,我怎样才能让它返回所有原始的 58 个结果,但增加了所提供模板 ID 的助推器值?

4

0 回答 0