@Override public void exitKeyvalue(KeyvalueContext ctx) { KeyValueQueryPart kvqp = new KeyValueQueryPart( currentKeyvalue.getString("key"), currentKeyvalue.getString("value"), ComparisonOperator.valueOf(currentKeyvalue.getString("comp"))); JsonObject q = makeQuery(kvqp); if (!combine(q)) { result.push(q); } currentKeyvalue = null; }
/** * Test if the given key-value query part refers to a gmlId and if it uses * the EQ operator (e.g. EQ(gmlId myId) or EQ(gml:id myId)) * @param kvqp the key-value query part to check * @return true if it refers to a gmlId, false otherwise */ private static boolean isGmlIdEQ(KeyValueQueryPart kvqp) { String key = kvqp.getKey(); ComparisonOperator comp = kvqp.getComparisonOperator(); return (comp == ComparisonOperator.EQ && ("gmlId".equals(key) || "gml:id".equals(key))); }
@Override public JsonObject compileQuery(QueryPart queryPart) { if (queryPart instanceof StringQueryPart) { // match values of all fields regardless of their name String search = ((StringQueryPart)queryPart).getSearchString(); return multiMatchQuery(search, "address.*"); } else if (queryPart instanceof KeyValueQueryPart) { KeyValueQueryPart kvqp = (KeyValueQueryPart)queryPart; String key = kvqp.getKey(); String value = kvqp.getValue(); ComparisonOperator comp = kvqp.getComparisonOperator(); String name = "address." + key; switch (comp) { case EQ: return termQuery(name, value); case GT: return gtQuery(name, value); case GTE: return gteQuery(name, value); case LT: return ltQuery(name, value); case LTE: return lteQuery(name, value); } } return null; } }
@Override public JsonObject compileQuery(QueryPart queryPart) { if (queryPart instanceof StringQueryPart) { String search = ((StringQueryPart)queryPart).getSearchString(); return ElasticsearchQueryHelper.termQuery("gmlIds", search); } else if (queryPart instanceof KeyValueQueryPart) { KeyValueQueryPart kvqp = (KeyValueQueryPart)queryPart; if (isGmlIdEQ(kvqp)) { return ElasticsearchQueryHelper.termQuery("gmlIds", kvqp.getValue()); } } return null; } }
@Override public JsonObject compileQuery(QueryPart queryPart) { if (queryPart instanceof StringQueryPart) { // match values of all fields regardless of their name String search = ((StringQueryPart)queryPart).getSearchString(); return ElasticsearchQueryHelper.multiMatchQuery(search, "genAttrs.*"); } else if (queryPart instanceof KeyValueQueryPart) { KeyValueQueryPart kvqp = (KeyValueQueryPart)queryPart; String key = kvqp.getKey(); String value = kvqp.getValue(); ComparisonOperator comp = kvqp.getComparisonOperator(); switch (comp) { case EQ: return ElasticsearchQueryHelper.termQuery("genAttrs." + key, value); case GT: return ElasticsearchQueryHelper.gtQuery("genAttrs." + key, value); case GTE: return ElasticsearchQueryHelper.gteQuery("genAttrs." + key, value); case LT: return ElasticsearchQueryHelper.ltQuery("genAttrs." + key, value); case LTE: return ElasticsearchQueryHelper.lteQuery("genAttrs." + key, value); } } return null; } }
} else if (queryPart instanceof KeyValueQueryPart) { KeyValueQueryPart kvqp = (KeyValueQueryPart)queryPart; String key = kvqp.getKey(); String value = kvqp.getValue(); ComparisonOperator comp = kvqp.getComparisonOperator(); if (kvqp.getComparisonOperator() == ComparisonOperator.EQ && "correlationId".equals(kvqp.getKey())) { JsonObject cq = ElasticsearchQueryHelper.termQuery("correlationId", value); if (result != null) {