public static QueryBuilder parseQueryAndFilters(Settings settings) { QueryBuilder query = QueryUtils.parseQuery(settings); List<QueryBuilder> filters = QueryUtils.parseFilters(settings); if (filters == null || filters.isEmpty()) { return query; } return new BoolQueryBuilder().must(query).filters(filters); }
/** * Builds a QueryBuilder from the given string * @param raw a JSON string or an URI search * @param isQuery true if the string is a query otherwise the string is considered as * a filter (only relevant for elasticsearch version prior to 2.x). * @return * @throws IOException */ public static QueryBuilder parse(String raw, boolean isQuery) throws IOException { if (raw.startsWith("?")) { return parseURI(raw.substring(1)); } else if (raw.startsWith("{")) { return new RawQueryBuilder(raw, isQuery); } else { throw new IllegalArgumentException("Failed to parse query: " + raw); } }
static QueryBuilder parseURI(String raw) { // break down the uri into parameters QueryStringQueryBuilder builder = new QueryStringQueryBuilder(); for (String token : raw.split("&")) { int indexOf = token.indexOf("="); Assert.isTrue(indexOf > 0, String.format("Cannot token [%s] in uri query [%s]", token, raw)); String name = token.substring(0, indexOf); String value = token.substring(indexOf + 1); applyURIParameter(builder, name, value); } return builder; }
static QueryBuilder randomQueryStringQuery(Random rand, int level) { QueryStringQueryBuilder query = new QueryStringQueryBuilder(); query.lenient(rand.nextBoolean()); query.analyzeWildcard(rand.nextBoolean()); query.query(Integer.toString(rand.nextInt())); query.analyzer(Integer.toString(rand.nextInt())); query.defaultOperator(rand.nextBoolean() ? "AND" : "OR"); return query; }
static QueryBuilder randomBoolQuery(Random rand, int level) { BoolQueryBuilder query = new BoolQueryBuilder(); int numMust = rand.nextInt(3); for (int i = 0; i < numMust; i++) { query.must(randomQuery(rand, level+1)); } int numShould = rand.nextInt(3); for (int i = 0; i < numShould; i++) { query.should(randomQuery(rand, level+1)); } int numFilter = rand.nextInt(3); for (int i = 0; i < numFilter; i++) { query.filter(randomQuery(rand, level+1)); } int numMustNot = rand.nextInt(3); for (int i = 0; i < numMustNot; i++) { query.mustNot(randomQuery(rand, level+1)); } return query; }
static QueryBuilder randomConstantScoreQuery(Random rand, int level) { return new ConstantScoreQueryBuilder().filter(randomQuery(rand, level+1)).boost(rand.nextFloat()); } }
static QueryBuilder randomFilteredQuery(Random rand, int level) { FilteredQueryBuilder query = new FilteredQueryBuilder(); query.query(randomQuery(rand, level+1)); List<QueryBuilder> filters = new ArrayList<QueryBuilder> (); int numFilters = rand.nextInt(3); for (int i = 0; i < numFilters; i++) { filters.add(randomQuery(rand, level+1)); } query.filters(filters); return query; }
public long count(boolean read) { Resource res = (read ? resources.getResourceRead() : resources.getResourceWrite()); if (res.isTyped()) { return client.count(res.index(), res.type(), QueryUtils.parseQuery(settings)); } else { return client.count(res.index(), QueryUtils.parseQuery(settings)); } }
static QueryBuilder randomRawQueryStringQuery(Random rand, int level) { QueryBuilder query = randomQuery(rand); FastByteArrayOutputStream out = new FastByteArrayOutputStream(256); Generator generator = new JacksonJsonGenerator(out); generator.writeBeginObject(); query.toJson(generator); generator.writeEndObject(); generator.close(); try { return new RawQueryBuilder(out.toString().trim(), false); } catch (IOException e) { throw new IllegalArgumentException("failed to parse raw query", e); } }
@Override public String toString() { FastByteArrayOutputStream out = new FastByteArrayOutputStream(256); JacksonJsonGenerator generator = new JacksonJsonGenerator(out); generator.writeBeginObject(); toJson(generator); generator.writeEndObject(); generator.close(); return out.toString(); } }
@Test public void testEquals() throws IOException { for (int i = 0; i < 20; i++) { QueryBuilder randomQuery = RandomQueryBuilders.randomQuery(random); String queryString = printQueryBuilder(randomQuery, false); RawQueryBuilder rawQuery = new RawQueryBuilder(queryString, false); String rawQueryString = printQueryBuilder(rawQuery, false); assertEquals(queryString, rawQueryString); if (randomQuery instanceof RawQueryBuilder) { assertEquals(randomQuery, rawQuery); } else { assertNotEquals(randomQuery, rawQuery); } } } }
static QueryBuilder randomTermQuery(Random rand, int level) { TermQueryBuilder termQuery = new TermQueryBuilder(); termQuery.field(Integer.toString(rand.nextInt())); termQuery.term(Integer.toString(rand.nextInt())); return termQuery; }
static QueryBuilder randomQuery(Random rand) { return randomQuery(rand, 0); }
@Test public void testTranslateUriQueryWithAnalyzer() throws Exception { cfg.setQuery("?q=foo:bar&analyzer=default"); QueryBuilder query = parseQuery(cfg); System.out.println(query); }
static BytesArray searchRequest(QueryBuilder query) { FastByteArrayOutputStream out = new FastByteArrayOutputStream(256); JacksonJsonGenerator generator = new JacksonJsonGenerator(out); try { generator.writeBeginObject(); generator.writeFieldName("query"); generator.writeBeginObject(); query.toJson(generator); generator.writeEndObject(); generator.writeEndObject(); } finally { generator.close(); } return out.bytes(); }
@Test public void testTranslateSimpleUriQueryWithoutArgs() throws Exception { cfg.setQuery("?q=m*"); QueryBuilder query = parseQuery(cfg); System.out.println(query); }
@Test public void testTranslateSimpleFieldUriQuery() throws Exception { cfg.setQuery("?q=foo:bar"); QueryBuilder query = parseQuery(cfg); System.out.println(query); }
@Test public void testTranslateUriQueryWithDefaultFieldAndFilters() throws Exception { cfg.setQuery("?q=foo:bar&df=name"); QueryBuilder query = parseQuery(cfg); System.out.println(query); }
@Test public void testTranslateSimpleUriQuery() throws Exception { cfg.setQuery("?q=foo"); QueryBuilder query = parseQuery(cfg); System.out.println(query); }
@Test public void testTranslateUriQueryWithDefaultField() throws Exception { cfg.setQuery("?q=foo:bar&df=name"); QueryBuilder query = parseQuery(cfg); System.out.println(query); }