1

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

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

我们yqlrepresentation()在 Vespa 的 Query 类中有一个方法。是否对每个非结构化查询都调用它,换句话说,非结构化查询是否被转换为 YQL,然后被索引?

4

1 回答 1

1

要通过查询传递特征进行排名,请编写一个搜索器,将它们添加到 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)”在排名表达式中访问这些值。

非结构化查询是否被转换为 YQL,然后被索引命中?

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

于 2018-03-15T08:52:24.880 回答