/** * A query that shows how to use range query on geo-location data (double) */ private SolrQuery getGeoQuery() throws QueryNodeException { ConciseQueryBuilder b = new ConciseQueryBuilder(); String q = b.newTwig("ChargeDeviceLocation") .with(b.newNode("xsd:double([52 TO 53])").setAttribute("Latitude")) .with(b.newNode("xsd:double([-2 TO 2])").setAttribute("Longitude")) .toString(); final SolrQuery query = new SolrQuery(); query.setQuery(q); return query; }
/** * Create a new twig query with the specified boolean expression as root query * <p> * The boolean expression must follow the syntax of the * {@link com.sindicetech.siren.qparser.keyword.ExtendedKeywordQueryParser}. */ public TwigQuery newTwig(final String booleanExpression) throws QueryNodeException { final TwigQuery twig = new TwigQuery(mapper, parser); twig.setRoot(booleanExpression); return twig; }
final com.sindicetech.siren.search.node.TwigQuery query = new com.sindicetech.siren.search.node.TwigQuery(); this.processRoot(query); if (this.hasLevel()) { query.setLevelConstraint(this.getLevel()); if (this.hasRange()) { query.setNodeConstraint(this.getLowerBound(), this.getUpperBound()); if (this.hasBoost()) { query.setBoost(this.getBoost());
@Test public void testBooleanSpanWithTwig() throws QueryNodeException { final QueryBuilder build = new QueryBuilder(); final TwigQuery twig = build.newTwig() .with(build.newBoolean() .with(build.newTwig("aa") .with(build.newNode("aaa"))) .with(build.newTwig("bb") .with(build.newNode("bbb"))) .setInOrder(false)); assertParser(twig); }
Query output = parser.parse(twig.toString(), ""); LuceneProxyNodeQuery q = (LuceneProxyNodeQuery) output; com.sindicetech.siren.search.node.TwigQuery t = (com.sindicetech.siren.search.node.TwigQuery) q.getNodeQuery(); .optional( build.newTwig("ccc") .with(build.newNode("ddd")) ); output = parser.parse(twig.toString(), ""); q = (LuceneProxyNodeQuery) output; t = (com.sindicetech.siren.search.node.TwigQuery) q.getNodeQuery();
/** * A query that shows how to use a custom datatype (uri) */ private SolrQuery getWebsiteQuery() throws QueryNodeException { ConciseQueryBuilder b = new ConciseQueryBuilder(); String q = b.newTwig("DeviceOwner") .with(b.newNode("uri(www.sourcelondon.net)").setAttribute("Website")) .toString(); final SolrQuery query = new SolrQuery(); query.setQuery(q); return query; }
/** * Create a new twig query with empty root */ public TwigQuery newTwig() { return new TwigQuery(mapper, parser); }
@Test public void testTwigWithOneChild() throws QueryNodeException { final QueryBuilder build = new QueryBuilder(); final TwigQuery twig = build.newTwig() .with(build.newNode("aaa")); assertParser(twig); }
/** * A query that shows how to combine SIREn query with the Solr's facet feature * on a Solr field. */ private SolrQuery getDeviceControllerFacet() throws QueryNodeException { ConciseQueryBuilder b = new ConciseQueryBuilder(); String q = b.newTwig("Connector") .with(b.newNode("xsd:long([32 TO *])").setAttribute("RatedOutputCurrent")) .toString(); final SolrQuery query = new SolrQuery(); query.setQuery(q); query.addFacetField("DeviceController.OrganisationName"); return query; }
@Test public void testTwigWithChildAndDescendant() throws QueryNodeException { final QueryBuilder build = new QueryBuilder(); final TwigQuery twig = build.newTwig() .with(build.newNode("aaa")) .without(build.newNode("bbb"), 2) .optional(build.newTwig() .with(build.newNode("ccc")), 4); assertParser(twig); }
@Test public void testSimpleJsonQuery() throws IOException, SolrServerException, QueryNodeException { this.addJsonString("1", "{ \"aaa\" : { \"bbb\" : \"ccc\" } }"); SolrQuery query = new SolrQuery(); final QueryBuilder b = new QueryBuilder(); query.setQuery(b.newTwig("aaa").with(b.newNode("ccc"), 3).toString()); query.setRequestHandler("tree"); String[] results = this.search(query, ID_FIELD); assertEquals(1, results.length); query = new SolrQuery(); query.setQuery(b.newTwig("aaa").with(b.newNode("ccc"), 2).toString()); query.setRequestHandler("tree"); results = this.search(query, ID_FIELD); assertEquals(0, results.length); }
@Test public void testTwigWithOneDescendant() throws QueryNodeException { final QueryBuilder build = new QueryBuilder(); final TwigQuery twig = build.newTwig() .with(build.newNode("aaa"), 2); assertParser(twig); }
if (this.hasLevel()) { twig.put(LevelPropertyParser.LEVEL_PROPERTY, this.getLevel()); if (this.hasRange()) { final ArrayNode array = twig.putArray(RangePropertyParser.RANGE_PROPERTY); array.add(this.getLowerBound()); array.add(this.getUpperBound()); if (this.hasBoost()) { twig.put(BoostPropertyParser.BOOST_PROPERTY, this.getBoost());
/** * A query that shows how to use the nested query parameter to use Solr's * query parsers on Solr's fields. */ private SolrQuery getNestedQuery() throws QueryNodeException { ConciseQueryBuilder b = new ConciseQueryBuilder(); String q = b.newTwig("DeviceOwner") .with(b.newNode("uri(www.sourcelondon.net)").setAttribute("Website")) .toString(); final SolrQuery query = new SolrQuery(); query.setQuery(q); query.setParam("nested", "{!lucene} ChargeDeviceName:university"); return query; }
@Test public void testQNamesMapping() throws SolrServerException, IOException, QueryNodeException { this.addJsonString("1", "{ \"uri\" : { " + "\"_value_\" : \"http://xmlns.com/foaf/0.1/Person\", " + "\"_datatype_\" : \"uri\" " + "} }"); final SolrQuery query = new SolrQuery(); final QueryBuilder b = new QueryBuilder(); query.setQuery(b.newTwig("uri").with(b.newNode("'foaf:Person'")).toString()); query.setRequestHandler("tree"); final String[] results = this.search(query, ID_FIELD); assertEquals(1, results.length); }
/** * See #15 */ @Test public void testTwigWithSetAndUnsetAttribute() throws QueryNodeException { final ConciseQueryBuilder build = new ConciseQueryBuilder(); final TwigQuery twig = build.newTwig("funding") .with(build.newNode("a").setAttribute("round")) .with(build.newNode("2006")); assertParser(twig); }
@Test public void testSimpleConciseTreeQuery() throws IOException, SolrServerException, QueryNodeException { this.addJsonString("1", "concise", "{ \"aaa\" : { \"bbb\" : \"ccc\" } }"); SolrQuery query = new SolrQuery(); final ConciseQueryBuilder b = new ConciseQueryBuilder(); query.setQuery(b.newTwig("aaa").with(b.newNode("ccc").setAttribute("bbb")).toString()); query.setRequestHandler("tree"); query.set("qf", "concise"); String[] results = this.search(query, ID_FIELD); assertEquals(1, results.length); }
@Test public void testURIDatatypeQuery() throws SolrServerException, IOException, QueryNodeException { this.addJsonString("1", "{ \"uri\" : { " + "\"_value_\" : \"http://xmlns.com/foaf/0.1/Person\", " + "\"_datatype_\" : \"uri\" " + "} }"); final SolrQuery query = new SolrQuery(); final QueryBuilder b = new QueryBuilder(); query.setQuery(b.newTwig("uri").with(b.newNode("uri('http://xmlns.com/foaf/0.1/Person')")).toString()); query.setRequestHandler("tree"); final String[] results = this.search(query, ID_FIELD); assertEquals(1, results.length); }
/** * A query that shows how to use range query on long numeric value */ private SolrQuery getOutputCurrentQuery() throws QueryNodeException { ConciseQueryBuilder b = new ConciseQueryBuilder(); TwigQuery twig1 = b.newTwig("ChargeDeviceLocation") .with(b.newNode("xsd:double([52 TO 53])").setAttribute("Latitude")) .with(b.newNode("xsd:double([-2 TO 2])").setAttribute("Longitude")); TwigQuery twig2 = b.newTwig("Connector") .with(b.newNode("xsd:long([32 TO *])").setAttribute("RatedOutputCurrent")); String q = b.newBoolean() .with(twig1) .with(twig2) .toString(); final SolrQuery query = new SolrQuery(); query.setQuery(q); return query; }