【问题标题】:Understanding Solr Function Query Performance了解 Solr 函数查询性能
【发布时间】:2019-08-16 13:34:49
【问题描述】:

我在 Solr 中使用“edismax”和“function-query”解析器,很难理解“function-query”所花费的查询时间是否有意义。我正在尝试优化的查询如下所示:

q={!func sum($q1,$q2,$q3)} 其中 q1,q2,q3 是 edismax 查询。

edismax 查询返回的 QTime 远低于 50 毫秒,但似乎函数查询是速率确定步骤,因为上面的组合查询大约需要 200-300 毫秒。我还分析了仅使用常量的函数查询的性能。

不同q的QTime结果如下:

  • 097ms for q={!func} sum(10,20)

  • 109ms for q={!func} sum(10,20,30)

  • 127ms for q={!func} sum(10,20,30,40)

  • 145ms for q={!func} sum(10,20,30,40,50)

这种趋势有意义吗?预计函数查询会这么慢吗?

是什么让 edismax 查询速度如此之快?

如何优化我的原始查询(具有 edismax 子查询 q1、q2、q3)以在 100 毫秒以下工作?

【问题讨论】:

    标签: search solr lucene information-retrieval edismax


    【解决方案1】:

    func 查询枚举所有文档,因此它不提供任何选择性。您可能不需要在文档上对其进行评估,这与 dismaxes 不匹配,例如

    q=+{!v=$q1} +{!v=$q2} +{!v=$q3} {!func sum($q1,$q2,$q3)}
    

    【讨论】:

    • 这对我不起作用。 Solr 尝试解析整个字符串(使用默认解析器),就好像它是一个关键字一样。您确定这种语法吗,因为据我所知,解析器名称应该遵循“!” Solr 似乎需要一个字符串作为“v”参数。
    • 请提供 debugQuery=true 的响应。也可以试试q=%2b{!v=$q1} %2b{!v=$q2} %2b{!v=$q3} {!func sum($q1,$q2,$q3)}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    相关资源
    最近更新 更多