使用外部支持的排名和查询功能增强查询?

Augment Query with ranking and query features powered externally?

在 vespa 应用程序中提交 http://localhost:8080/search/?query=honda car 时 "honda car" 作为对汽车数据库的非结构化查询。

我有一个外部引擎,它支持查询功能和基于查询的排名功能(权重)。我非常了解查询配置文件,但是如果我想使用 &feature1="value1"&feature2="value2" 来增加查询,而不是使用它,搜索器或任何其他组件怎么可能呢?

我们在 Vespa 的查询 class 中有一个方法 yqlrepresentation()。是否为每个非结构化查询调用,换句话说,是否将非结构化查询转换为 YQL,然后在索引上命中?

要通过查询传递特征以进行排名,请编写一个搜索器,将它们添加到 Query.getRanking().getFeatures():

public class FeatureAdder extends Searcher {
    @Override
    public Result search(Query query, Execution execution) {
        Map<String, Double> features = lookUpFeaturesFromExternalStore();
        features.forEach((name, value) -> query.getRanking().getFeatures().put("query(" + name + ")", 
                                                                               String.valueOf(value)));
        return execution.search(query);
    }
}

现在您可以使用 "query(name)" 在排名表达式中访问这些值。

does an unstructured query gets converted to YQL and then gets hit on index?

YQL只是一种外部表示语言。查询(非结构化或非结构化)被解析为 Query.getModel().getQueryTree() 下的对象表示。如果您想以编程方式(从搜索器)修改查询,这就是您应该做的事情。