简体   繁体   English

Amazon CloudSearch结构化查询解析器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM