SOLR:查询和筛选查询都需要什么?

SOLR:查询和筛选查询都需要什么?,solr,Solr,对于布尔表达式,仅查询参数q=…就可以获得所需的数据。或者,使用q=*:*过滤器查询fq可以具有相同的参数并获得大致相同的结果 我总是使用q=*:*应用第二个解决方案,同时为所有人提供过滤器查询“fq”,因为我知道存在一些过滤器查询缓存。那么,为什么两者都需要呢?fq始终用于查询是否正确?fq不会影响文档的分数-它用于过滤查询返回的文档数量,而不是更改给定查询的文档分数q是您希望用于查询的内容,其中将对每个文档的相关性进行评分 除了过滤部分之外,您希望将这些部分分开的原因是,过滤器查询的缓存可以

对于布尔表达式,仅查询参数
q=…
就可以获得所需的数据。或者,使用
q=*:*
过滤器查询fq可以具有相同的参数并获得大致相同的结果


我总是使用
q=*:*
应用第二个解决方案,同时为所有人提供过滤器查询“fq”,因为我知道存在一些过滤器查询缓存。那么,为什么两者都需要呢?fq始终用于查询是否正确?

fq
不会影响文档的分数-它用于过滤查询返回的文档数量,而不是更改给定查询的文档分数
q
是您希望用于查询的内容,其中将对每个文档的相关性进行评分

除了过滤部分之外,您希望将这些部分分开的原因是,过滤器查询的缓存可以单独存储,这意味着您可以缓存过滤器的结果,同时仍然保留实际的查询变量。因此,如果要筛选
inStock
的值,则该筛选器可以生成一次并缓存,而实际查询可以更改。对于每个查询,不必重新计算“inStock”结果集中每个文档的“成员资格”,因为它不会影响分数-只需与缓存中已生成的文档列表相交即可


和。

fq
不会影响文档的分数-它用于过滤查询返回的文档数量,而不会更改给定查询的文档分数
q
是您希望用于查询的内容,其中将对每个文档的相关性进行评分

除了过滤部分之外,您希望将这些部分分开的原因是,过滤器查询的缓存可以单独存储,这意味着您可以缓存过滤器的结果,同时仍然保留实际的查询变量。因此,如果要筛选
inStock
的值,则该筛选器可以生成一次并缓存,而实际查询可以更改。对于每个查询,不必重新计算“inStock”结果集中每个文档的“成员资格”,因为它不会影响分数-只需与缓存中已生成的文档列表相交即可


而且。

在做出此类决定时,缓存不应成为您的问题。有。也用于查询和查询结果。这里是。我将不同意-你应该考虑过滤器查询会如何影响缓存-特别是你是否应该把过滤器合并成一个FQ或者使用几个FQ语句(因为它们被高速缓存)。意识到这一差异可以避免损坏缓存,并可能大大提高性能。这不是我想说的。选择fq或q参数的决定不应基于是否存在缓存,而应基于它是否正确。初始查询应该是q,几乎总是这样。优化结果应该交给fq…在做这样的决定时,缓存不应该是您关心的问题。有。也用于查询和查询结果。这里是。我将不同意-你应该考虑过滤器查询会如何影响缓存-特别是你是否应该把过滤器合并成一个FQ或者使用几个FQ语句(因为它们被高速缓存)。意识到这一差异可以避免损坏缓存,并可能大大提高性能。这不是我想说的。选择fq或q参数的决定不应基于是否存在缓存,而应基于它是否正确。初始查询应该是q,几乎总是这样。细化结果应提交给fq。。。