Vespa yql 中的动态 targetHits

问题描述

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

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

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

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

非常感谢。

解决方法

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

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

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

您当然可以修改您发送的 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);
        }

    }