首先澄清一下: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 body)
{ "contains" : [ "hobbies", "sports" ]}
// 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 body)
{"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 body)
{"select" : { "where" : { "range" : [ "mother.Birthyear", { ">": 1960}] } } }
// Java 代码
query.getModel().getQueryTree().setRoot(new IntItem(">1960", "mother.Birthyear"));
笔记:
- 通过在结构中打点来引用结构化字段。
- 容器变为(具有这些标记)或(等于)取决于字段匹配设置。