因此有一个 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/