首先澄清一下:YQL 只是一种查询语法。 JSON 查询语言 (https://docs.vespa.ai/documentation/reference/select-reference.html) 是另一种。另一种方式(最常见的)是直接根据从 Searcher (Java) 组件中的客户端接收到的数据构造查询。
下面我将展示在每个变体中构建您的三个示例。 Vespa 没有日期类型,所以在这里我假设您有一个“生日”整数字段。
选择所有爱好包含“运动”的人。
// YQL(作为 GET URL 参数)
?query=select * from Persons where hobbies contains 'sports';&type=yql
// JSON(POST 正文)
{“包含”:[“爱好”、“运动”]}
// Java 代码
query.getModel().getQueryTree().setRoot(new WordItem("sports", "hobbies"));
选择电话区号等于“NY”的所有人员。
// YQL(作为 GET URL 参数)
?query=select * from Persons wherephones.areaCode contains 'NY';&type=yql
// JSON(POST 正文)
{"select" : { "where" : { "contains" : [ "phones.areaCode", "NY" ] } } }
// Java 代码
query.getModel().getQueryTree().setRoot(new WordItem("NY", "phones.areaCode"));
选择所有母亲的生日大于 1960 年的人。
// YQL(作为 GET URL 参数)
?query=select * from Persons where mother.Birthyear > 1960;&type=yql
// JSON(POST 正文)
{"select" : { "where" : { "range" : [ "mother.Birthyear", { ">": 1960}] } } }
// Java 代码
query.getModel().getQueryTree().setRoot(new IntItem(">1960", "mother.Birthyear"));
注意:
- 结构化字段通过在结构中的点来引用。
- 容器变为(具有这些标记)或(等于)取决于字段匹配设置。