【问题标题】:SOLR FunctionQuery performanceSOLR 函数查询性能
【发布时间】:2014-09-12 19:40:27
【问题描述】:

所以有一个 SOLR 查询,其中一个 fq 是 FunctionQuery

http://wiki.apache.org/solr/FunctionQuery

这是我的fq之一

{!frange l=1}or(and(exists(not(query({!v='type:scu'}))), or(or(termfreq(nba,184887),termfreq(nba,15817823),termfreq(nba,15819703),termfreq(nba,15821195),termfreq(nba,15859845),termfreq(nba,15860041), ...and 2000 other termfreq() calls))),exists(query({!v='isn_field:400112'})),exists(query({!v='(type:scu AND (is_svad:(20332 OR 21017 OR 200662 OR 23 OR 2685 OR 653 OR 266035 OR 267 OR 26612 OR 566127 OR 264129 OR 266133)))'}))) 

我的问题是,如果我不使用 FunctionQuery,例如,如果我没有使用函数 or(termfreq(nba, number), termfreq(nba, number)) 语句,我只执行 solr query OR (nba:number1 OR nba:number2 OR nba:number3 ...etc),则此 FunctionQuery 的性能如何?

有没有办法进一步优化 FunctionQuery 使其变得更快?

【问题讨论】:

  • 看看新的 Solr 4.10 terms filter 其中more efficiently match many terms in a single field.

标签: java performance solr lucene search-engine


【解决方案1】:

通常,您必须调用的函数查询越少越好。也就是说,对于您的特定用例,这可能不是性能问题,具体取决于索引中的文档数量、查询负载和配置文件,以及缓存的使用情况和大小。

由于 Solr 有许多可用的缓存(而 Lucene 有 Field Cache that caches Function Queries),实际的性能影响会因外部因素而异。

您必须进行一些分析运行或实时负载测试以确定在这种情况下是否值得优化,但请记住 fq=-terms 是单独缓存的,因此如果您重复使用部分过滤器查询,您可以获得更好的缓存性能(而不是将静态和动态查询组合在同一个过滤器中,将它们拆分为一动态和一静态,这样静态过滤器可以更频繁地重用)。同样,性能将取决于。

【讨论】:

    猜你喜欢
    • 2019-08-16
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多