[英]Amazon CloudSearch Structured Query Parser
I need to parse Amazon CloudSearch "structured" queries, but could not find any related source. 我需要解析Amazon CloudSearch“结构化”查询,但找不到任何相关来源。 Does anyone know a parser to parse these queries?
有谁知道解析器来解析这些查询?
Related documentation : http://docs.aws.amazon.com/cloudsearch/latest/developerguide/searching-compound-queries.html 相关文档: http : //docs.aws.amazon.com/cloudsearch/latest/developerguide/searching-compound-queries.html
Awsome has a very handy query builder for structured queries. Awsome具有用于结构化查询的非常方便的查询生成器。 The idea is to build the structured query string as
这个想法是将结构化查询字符串构建为
(and ('title:'star' (or actors:'Harrison Ford' actors:'William Shatner')
using an utility builder which takes field, value and the operator {and, or, eq, prefix etc.} and constructs the query. 使用一个实用工具构建器,该构建器使用字段,值和运算符{(或eq,前缀等)}并构造查询。 a simple example implementation of the query looks this like
一个简单的查询示例实现如下所示
class QueryBuilder {
String field;
String value;
String operator;
Set<QueryBuilder> queries;
public QueryBuilder(String field, String value) {
this.field = field;
this.value = value;
}
public QueryBuilder(String field, String value, String operator,
QueryBuilder... queries) {
this.field = field;
this.value = value;
this.operator = operator;
this.queries = queries;
}
public static QueryBuilder and(QueryBuilder.. expr) {
this("and", queries);
}
public static QueryBuilder or(QueryBuilder.. expr) {
this("or", queries);
}
public String toString() {
if(queries == null || queries.isEmpty() {
ImmutableSet<String> queryParts = ImmutableSet.of("(",
operator, "field=", field, value, ")");
return Joiner.on(' ').join(queryParts);
} else {
//nested queries for an operator
String nestedQuery = Joiner.on(' ').join(queries);
ImmutableSet<String> queryParts = ImmutableSet.of("(",
operator.toString(), nestedQuery, ")");
return Joiner.on(' ').join(queryParts);
}
}
}
In your code simply call 在您的代码中只需调用
QueryBuilder builder = QueryBuidler.and(new QueryBuilder("title", "star"),
QueryBuilder.or(new QueryBuilder("actors", "Harrison Ford"),
new QueryBuilder("actors", "William Shatner")));
String query = builder.toString();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.