【问题标题】:Dynamic targetHits in Vespa yqlVespa 中的动态目标命中率
【发布时间】:2021-05-26 07:59:59
【问题描述】:

我正在尝试创建一个 Vespa 查询,我想在其中设置 targetHits 的速率限制。例如,下面的查询有一个常数 3 targetHits:

'yql': 'select id, title from sources * where \
        ([{"targetHits":3}]nearestNeighbor(embeddings_vector,query_embeddings_vector));'

有什么方法可以让我在每次通话中动态设置这个号码?

还有 hits 和 targetHits 有什么区别?它与最低要求和期望要求有关吗?

非常感谢。

【问题讨论】:

    标签: yql vespa


    【解决方案1】:

    我不确定你所说的 targetHits 的速率限制是什么意思,但一般来说

    • 如果您使用多节点集群运行 Vespa,则 targetHits 是每个内容节点
    • targetHits 是您希望向排名配置文件的第一阶段排名函数公开的点击次数
    • hits 仅控制在 SERP 响应中返回的数量。要求每个内容节点的 targethits 500 进行排名是完全有效的,最后只是全球最佳 10(根据您的排名资料)

    【讨论】:

    • 感谢您的快速回答。我不运行多节点集群,也没有第二阶段排名功能。我目前所做的是使用 ANN 接受嵌入并返回指定数量的相关嵌入,如果这有意义的话。据我了解,在这种情况下不需要点击?
    • Hits 始终设置 - 当您需要扩展时,一切都必须相同 :-) 默认值为 10:docs.vespa.ai/en/reference/query-api-reference.html#hits
    • 即使您只想要 n 个最近的邻居,您也总是需要排名配置文件,请参阅docs.vespa.ai/en/nearest-neighbor-search.html
    • @Jon 感谢您的澄清:)。乔,我确实有一个排名资料,但仅基于嵌入
    • 伟大的@Nigat,只是想确定一下。一些用户使用 YQL 并没有指定排名配置文件时遇到此问题。
    【解决方案2】:

    有什么方法可以让我在每次通话中动态设置这个号码?

    您当然可以修改您发送的 SQL,但更好的方法是创建一个 Searcher 作为应用程序的一部分,以编程方式对其进行修改,例如:

        public class TargetHitsSearcher extends Searcher {
        
            @Override
            public Result search(Query query, Execution execution) {
                Item root = query.getModel().getQueryTree().getRoot();
                if (root instanceof NearestNeighborItem) { // In general; search recursively
                    int target = query.properties().getInteger("myTarget");
                    ((NearestNeighborItem)root).setTargetNumHits(target);
                }
                return execution.search(query);
            }
    
        }
    

    【讨论】:

      猜你喜欢
      • 2011-03-23
      • 2019-12-21
      • 1970-01-01
      • 2020-11-18
      • 1970-01-01
      • 2011-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多