A Presentation by
Content :
   What Is Query Builder?
   Example usages
   Why Query Builder?
   Query Builder Debugger
   Anatomy of a query
   Predicate resolution & execution
   Standard predicates
   Ordering
   Grouping of predicates
   Facets
   Sample Queries
   Javadoc Links
   Query Builder Demo
   References

                                   A Presentation by
What is QueryBuilder
 QueryBuilder    is a service for building Queries searching
  the Java Content Repository and which are easily
  extensible
 A Query represents a JCR repository query that can be
  created programmatically, with a list of so-called
  Predicates
 A Predicate is a single constraint for a Query. It is a pure
  data model object, consisting of a parameter map based
  on key-value string pairs.
 This service allows to create queries with several
  convenience methods
 In addition, it allows to store queries in the repository
  and load them again.

                                   A Presentation by
Example usages




                 A Presentation by
Why Query Builder?
 Because  QueryBuilder is...
   an API to build queries for a query engine (JCR XPath
    underneath)
   especially via URL query parameters (GET & POSTs)
   compatible with HTML forms
   allowing to add/remove conditions (“predicates”)
    individually
   allowing copy/paste of queries
   easily extensible
   providing some goodies (e.g. facets)




                                A Presentation by
Query Builder Debugger




                         A Presentation by
Anatomy of a query




                     A Presentation by
Predicate resolution & execution
 Internally,
            a predicate evaluator is resolved
 Based on the type
 OSGi component (using factories)
 Handles:
     mapping to xpath (required)
     filtering of results
     custom ordering mechanism
     facet extraction
 Multiple   predicates of the same type(define an order)




                                       A Presentation by
Standard predicates
 path                           range
     supports multiple paths    daterange
     but beware: can be slow    similar
 property                           rep:similar
     JCR property               tagid& tag
     different operations       language
 type                               page languages
     node type                  event
 fulltext                           calendar
     full text search               example for shortening




                                   A Presentation by
Ordering
   Use (special) orderby predicate
       sort ascending by default, use orderby.desc=true for descending
   (1) Order by JCR properties
       orderby=@cq:tags
       orderby=@jcr:content/cq:tags
   (2) Reference predicate by name
       orderby=1_property
       predicate evaluator must provide ordering
       simply a list of properties (=> used in xpath query)
       or a custom Comparator (=> run after filtering)
   Multiple orderings
       1_orderby=@cq:tags
       2_orderby=@cq:lastModified
       3_orderby=nodename


                                              A Presentation by
Grouping of predicates




                         A Presentation by
Facets
  Extract set of possible values found in current result
  Options for a more specific query
  Facet = set of buckets
      Facet = tag
      Buckets = product, business, marketing
  Buckets    can also be custom ranges
      Facet = daterange
      Buckets = yesterday, last week, last year...




                                       A Presentation by
Sample Queries




                 A Presentation by
Sample Queries




                 A Presentation by
Sample Queries




                 A Presentation by
Sample Queries




                 A Presentation by
Javadoc Links

Javadoc                               Description
com.day.cq.search                     Basic QueryBuilder and Query API


com.day.cq.search.result              Result API
com.day.cq.search.facets              Facets
com.day.cq.search.facets.buckets      Buckets (contained within facets)


com.day.cq.search.eval                Predicate Evaluators
com.day.cq.search.facets.extractors   Facet Extractors (for evaluators)


com.day.cq.search.writer              JSON Result Hit Writer for Querybuilder
                                      servlet (/bin/querybuilder.json)




                                               A Presentation by
Query Builder Demo

  Create a getimages component
  Include that component on content
   page




                          A Presentation by
Query Builder Demo
  getimages.jsp   contains QueryBuilder API




                             A Presentation by
Query Builder Demo
 This
     component is used to get images from
  dam:Asset/jcr:content/image/jpeg tag




                          A Presentation by
References

 http://dev.day.com/docs/en/cq/current/da
  m/customizing_and_extendingcq5dam/quer
  y_builder.html
 http://dev.day.com/docs/en/cq/current/jav
  adoc/com/day/cq/search/QueryBuilder.html
 www.pro-
  vision.de/adaptto/downloads/2011_querybuil
  der.pdf
 http://dev.day.com/docs/en/cq/current/jav
  adoc/com/day/cq/search/Query.html



                          A Presentation by

Quiery builder

  • 1.
  • 2.
    Content :  What Is Query Builder?  Example usages  Why Query Builder?  Query Builder Debugger  Anatomy of a query  Predicate resolution & execution  Standard predicates  Ordering  Grouping of predicates  Facets  Sample Queries  Javadoc Links  Query Builder Demo  References A Presentation by
  • 3.
    What is QueryBuilder QueryBuilder is a service for building Queries searching the Java Content Repository and which are easily extensible  A Query represents a JCR repository query that can be created programmatically, with a list of so-called Predicates  A Predicate is a single constraint for a Query. It is a pure data model object, consisting of a parameter map based on key-value string pairs.  This service allows to create queries with several convenience methods  In addition, it allows to store queries in the repository and load them again. A Presentation by
  • 4.
    Example usages A Presentation by
  • 5.
    Why Query Builder? Because QueryBuilder is...  an API to build queries for a query engine (JCR XPath underneath)  especially via URL query parameters (GET & POSTs)  compatible with HTML forms  allowing to add/remove conditions (“predicates”) individually  allowing copy/paste of queries  easily extensible  providing some goodies (e.g. facets) A Presentation by
  • 6.
    Query Builder Debugger A Presentation by
  • 7.
    Anatomy of aquery A Presentation by
  • 8.
    Predicate resolution &execution  Internally, a predicate evaluator is resolved  Based on the type  OSGi component (using factories)  Handles:  mapping to xpath (required)  filtering of results  custom ordering mechanism  facet extraction  Multiple predicates of the same type(define an order) A Presentation by
  • 9.
    Standard predicates  path  range  supports multiple paths  daterange  but beware: can be slow  similar  property  rep:similar  JCR property  tagid& tag  different operations  language  type  page languages  node type  event  fulltext  calendar  full text search  example for shortening A Presentation by
  • 10.
    Ordering  Use (special) orderby predicate  sort ascending by default, use orderby.desc=true for descending  (1) Order by JCR properties  orderby=@cq:tags  orderby=@jcr:content/cq:tags  (2) Reference predicate by name  orderby=1_property  predicate evaluator must provide ordering  simply a list of properties (=> used in xpath query)  or a custom Comparator (=> run after filtering)  Multiple orderings  1_orderby=@cq:tags  2_orderby=@cq:lastModified  3_orderby=nodename A Presentation by
  • 11.
    Grouping of predicates A Presentation by
  • 12.
    Facets  Extractset of possible values found in current result  Options for a more specific query  Facet = set of buckets  Facet = tag  Buckets = product, business, marketing  Buckets can also be custom ranges  Facet = daterange  Buckets = yesterday, last week, last year... A Presentation by
  • 13.
    Sample Queries A Presentation by
  • 14.
    Sample Queries A Presentation by
  • 15.
    Sample Queries A Presentation by
  • 16.
    Sample Queries A Presentation by
  • 17.
    Javadoc Links Javadoc Description com.day.cq.search Basic QueryBuilder and Query API com.day.cq.search.result Result API com.day.cq.search.facets Facets com.day.cq.search.facets.buckets Buckets (contained within facets) com.day.cq.search.eval Predicate Evaluators com.day.cq.search.facets.extractors Facet Extractors (for evaluators) com.day.cq.search.writer JSON Result Hit Writer for Querybuilder servlet (/bin/querybuilder.json) A Presentation by
  • 18.
    Query Builder Demo  Create a getimages component  Include that component on content page A Presentation by
  • 19.
    Query Builder Demo  getimages.jsp contains QueryBuilder API A Presentation by
  • 20.
    Query Builder Demo This component is used to get images from dam:Asset/jcr:content/image/jpeg tag A Presentation by
  • 21.
    References  http://dev.day.com/docs/en/cq/current/da m/customizing_and_extendingcq5dam/quer y_builder.html  http://dev.day.com/docs/en/cq/current/jav adoc/com/day/cq/search/QueryBuilder.html  www.pro- vision.de/adaptto/downloads/2011_querybuil der.pdf  http://dev.day.com/docs/en/cq/current/jav adoc/com/day/cq/search/Query.html A Presentation by