使用外部支持的排名和查询功能增强查询?
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() 下的对象表示。如果您想以编程方式(从搜索器)修改查询,这就是您应该做的事情。
在 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() 下的对象表示。如果您想以编程方式(从搜索器)修改查询,这就是您应该做的事情。