java - SOLR函数查询性能

标签 java performance solr lucene search-engine

因此有一个 SOLR 查询,其中 fq 之一是 FunctionQuery

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

这是我的一个常见问题

{!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 相比,此 FunctionQuery 的性能如何,例如,如果不使用函数 or(termfreq(nba, number), termfreq(nba, number) ) 语句我只是做 solr 查询 OR (nba:number1 OR nba:number2 OR nba:number3 ...etc)?

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

最佳答案

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

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

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

关于java - SOLR函数查询性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25815654/

相关文章:

java - Swing 中的流畅动画

sql - 更新和删除查询在 Azure 托管实例中运行需要更长的时间

performance - Apache 后面的 node.js 是否比 node.js HTTP 服务器慢得多?

MySQL数据库结构: more columns or more rows

solr - 如果 Caasandra 没有搜索功能,FaceBook 如何使用 Cassandra 进行收件箱搜索?

ruby-on-rails - Sunspot/Solr 无法按 bool 值搜索

java - 使用 Talend ETL 合并 Excel 单元格

java - 打开并写入文件 Java

java - Firebase:从存储和数据库中删除时,存储删除应该在存储删除的 onSuccessListener 中吗?

solr - 需要 Sitecore 补丁文件帮助