SlideShare ist ein Scribd-Unternehmen logo
1 von 25
Downloaden Sie, um offline zu lesen
.adaptTo(Berlin)



       CQ5 QueryBuilder
       Alexander Klimetschek | Senior Developer, Day | @alexkli




© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.   1
Agenda

                                                                          (1) What it looks like & Use Cases
                                                                          (2) Philosophy & Consequences
                                                                          (3) Debugging
                                                                          (4) Queries & Samples
                                                                          (5) Running Queries
                                                                          (6) Facets
                                                                          (7) Extending




© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.               2
QueryBuilder - What it looks like

§   Search for jar files, and order them newest first:
                                                       type=nt:file
                                                       nodename=*.jar
                                                       orderby=@jcr:content/jcr:lastModified
                                                       orderby.sort=desc

§   As URL:
                http://localhost:4502/bin/querybuilder.json?
                type=nt:file&nodename=*.jar&
                orderby=@jcr:content/jcr:lastModified&orderby.sort=desc


§   Result as JSON:                                     {
                                                             success: true,
                                                             results: 10,
                                                             total: 155,
                                                             offset: 0,
                                                             hits: [{
                                                               path: "/apps/cloudmgr/install/cq-change-admin-pwd-1.0.1-SNAPSHOT.jar"
                                                               excerpt: "application/java-archive"
                                                               name: "cq-change-admin-pwd-1.0.1-SNAPSHOT.jar"
                                                               ....
                                                             },{...}
                                                             ]
                                                         }



© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.                   3                                        QueryBuilder - AdaptTo(Berlin) 2011
Use Cases!?

§   Advanced query forms
     §   DAM Asset share
     §   form-based elements
     §   „querybuilder UI components“
     §   author can add/remove them
          individually
     §   normal form POST or via AJAX




     §   Content Finder would be cool....




§   Search component in CQ (for facets)
§   Quick AJAX json query from the client side

© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.   4   QueryBuilder - AdaptTo(Berlin) 2011
Philosophy

§   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)




§   QueryBuilder is not...
     §   a query engine itself
     §   does not have its own search index
     §   or even cache


© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.   5   QueryBuilder - AdaptTo(Berlin) 2011
Consequences: URL parameters

§   Set of key = value pairs
                                                                                                                                        d   er
          Java: hash maps, property files                                                                                       ry buil
     §                                                                                                            ue
                                                                                                            b in/q
                                                                                                     :4 502/ .jar& odified
                                                                                              al host name=* :lastM
                                                                                      :/  /loc e&node nt/jcr
§   Keep it short for GET requests                                               http nt:fil :conte
                                                                                       =
                                                                                  type by=@jcr
                                                                                        r
     §   as fallback, use POST to transport „long“ queries                        orde
     §   but short queries are more readable
     => Avoid duplication in parameter names
     => Allow to write custom „shortcut“ predicates (extensible)

§   Order must be encoded in parameter names
     §   HTML form GETs/POSTs are required to be in order
     §   but the Java servlet spec gives you a hash map....
     => Conflicts with short names above
     => Solution is not very intuitive the first time, but it works

© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.   6                       QueryBuilder - AdaptTo(Berlin) 2011
More Consequences

§   HTML checkbox behaviour
     §   checked: field=on
     §   not checked: <not sent with the request>
§   Predicates are separate entities
     §   though grouping exists
§   Copy/paste
     §   obvious one, but XPath for JCR does not respect it (limit & offset)
     §   nothing that can only be done through an API call
     §   global settings, given as p.offset=10
§   Extensible
     §   predicates evaluators as OSGi components
     §   SCR registration to associate with predicate name




© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.   7   QueryBuilder - AdaptTo(Berlin) 2011
QueryBuilder Debugger

§   http://localhost:4502/libs/cq/search/content/querydebug.html




© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.   8   QueryBuilder - AdaptTo(Berlin) 2011
Debug logs

§   For all query builder executed queries

§   Set „com.day.cq.search“ to INFO or DEBUG or TRACE level

§   Standard INFO level (shortened):
     15.09.2011 19:17:48.566 *INFO* ...QueryImpl                              executing query (URL):
     nodename=*.jar&type=nt%3afile
     15.09.2011 19:17:48.566 *INFO* ...QueryImpl                              executing query (predicate tree):
     ROOT=group: [
         {nodename=nodename: nodename=*.jar}
         {type=type: type=nt:file}
     ]
     15.09.2011 19:17:48.567 *INFO* ...QueryImpl                              xpath query: //element(*, nt:file)
     15.09.2011 19:17:48.569 *INFO* ...QueryImpl                              xpath query took 3 ms
     15.09.2011 19:17:48.569 *INFO* ...QueryImpl                              filtering predicates: {nodename=nodename: nodename=*.jar}
     15.09.2011 19:17:48.752 *INFO* ...QueryImpl                              >> xpath query returned 5098 results (counted)
     15.09.2011 19:17:48.753 *INFO* ...QueryImpl                              filtering took 184 ms
     15.09.2011 19:17:48.753 *INFO* ...QueryImpl                              >> after filtering there are 155 results
     15.09.2011 19:17:48.753 *INFO* ...QueryImpl                              entire query execution took 187 ms




§   For production, set it to WARN or ERROR ;-)


© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.           9                                  QueryBuilder - AdaptTo(Berlin) 2011
Anatomy of a query


                                                         Predicate name and type and parameter
              Predicates


                                                 type=cq:Page
                                                 property=jcr:content/cq:template
                                       {         property.value=/apps/geometrixx/templates/homepage



                                                                              Parameter        Value

                 Predicate‘s type is mirrored as parameter internally:

                                        type.type=cq:Page
                                        property.property=jcr:content/cq:template
                                        property.value=/apps/geometrixx/templates/homepage



© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.               10           QueryBuilder - AdaptTo(Berlin) 2011
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




© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.   11   QueryBuilder - AdaptTo(Berlin) 2011
Multiple predicates of the same type

§   Fixed numbering scheme
§   Name = <nr>_<type>
§   Allows to define an order
     §   work around hash maps


                              type=cq:Page
                              1_property=jcr:content/cq:template
                              1_property.value=/apps/geometrixx/templates/homepage
                              2_property=jcr:content/jcr:title
                              2_property.value=English




§   No custom names possible!



© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.   12   QueryBuilder - AdaptTo(Berlin) 2011
Standard predicates

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


© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.   13                                QueryBuilder - AdaptTo(Berlin) 2011
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


© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.   14   QueryBuilder - AdaptTo(Berlin) 2011
Grouping of predicates

§   Special group predicate
                                             fulltext=Management
                                             group.p.or=true
                                             group.1_path=/content/geometrixx/en
                                             group.2_path=/content/dam/geometrixx


§   Like brackets:
     §   (fulltext AND (path=... OR path=...))

§   Nested:
                                             fulltext=Management
                                             group.p.or=true
                                             group.1_group.path=/content/geometrixx/en
                                             group.1_group.type=cq:Page                      a re ! w !
                                                                                        Be w e s l o
                                             group.2_group.path=/content/dam/geometrixx C a n b
                                             group.2_group.type=dam:Asset

     §   (ft AND ( (path= AND type=) OR (path= AND type=) ))

© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.   15            QueryBuilder - AdaptTo(Berlin) 2011
Running queries

§   Default servlets
     §   JSON: http://localhost:4502/bin/querybuilder.json
     §   Atom feed: http://localhost:4502/bin/querybuilder.feed
     §   iCalendar: http://localhost:4502/bin/querybuilder.ics


§   Java API
                  PredicateGroup root = PredicateGroup.create(request.getParameterMap());
                  Query query = queryBuilder.createQuery(root, session);

                  SearchResult result = query.getResult();
                  for (Hit hit : result.getHits()) {
                      String path = hit.getPath();
                      // ....
                  }




© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.   16   QueryBuilder - AdaptTo(Berlin) 2011
JSON servlet

§   JSON: http://localhost:4502/bin/querybuilder.json


§   p.hits selects how the hits are written
     §   simple
          §   path, lastmodified, etc. only
     §   full
          §   full sling json rendering of node
          §   by default entire subtree
          §   p.nodedepth=1 as in sling‘s json (0 = infinity)
     §   selective
          §   p.properties is an array of properties to write
          §   just the node itself




© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.   17   QueryBuilder - AdaptTo(Berlin) 2011
Java API

§   From HTTP request:
                Session session = request.getResourceResolver().adaptTo(Session.class);
                PredicateGroup root = PredicateGroup.create(request.getParameterMap());
                Query query = queryBuilder.createQuery(root, session);

§   From hash map:
                Map map = new HashMap();
                map.put("path", "/content");
                map.put("type", "nt:file");
                Query query = builder.createQuery(PredicateGroup.create(map), session);


§   From predicates:
                PredicateGroup group = new PredicateGroup();
                group.add(new Predicate("mypath", "path").set("path", "/content"));
                group.add(new Predicate("mytype", "type").set("type", "nt:file"));
                Query query = builder.createQuery(group, session);



© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.   18   QueryBuilder - AdaptTo(Berlin) 2011
Persisted Queries

§   Store query
     §   in Java properties file format
     §   in the repository
     §   as file node
     §   or as string property

                  Query query = .... // create query normally

                  // store query as file
                  queryBuilder.storeQuery(query, „/content/myquery“, true, session);


                  // load it again
                  Query query = queryBuilder.loadQuery(„/content/myquery“, session);



§   List component allows this



© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.   19   QueryBuilder - AdaptTo(Berlin) 2011
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...


                                           Map<String, Facet> facets = result.getFacets();
                                           for (String key : facets.keySet()) {
                                               Facet facet = facets.get(key);
                                               if (facet.getContainsHit()) {
                                                   writer.key(key).array();
                                                   for (Bucket bucket : facet.getBuckets()) {
                                                   }
                                               }
                                           }

© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.   20                QueryBuilder - AdaptTo(Berlin) 2011
Run new query based on facet/bucket

§   Simple as that:


                        String bucketURL =

                        query.refine(bucket).getPredicates().toURL();


§   Facets are extracted for all predictes in the current query
     §   keep them „empty“ if they should not search


                            type=cq:Page
                            1_property=jcr:content/cq:template
                            1_property.value=/apps/geometrixx/templates/homepage
                            2_property=jcr:content/jcr:title



                                                                   No value for 2_property

© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.            21    QueryBuilder - AdaptTo(Berlin) 2011
Extending: Writing custom predicate evaluators

/** @scr.component metatype="no"
 *                factory="com.day.cq.search.eval.PredicateEvaluator/event" */
public class EventPredicateEvaluator extends AbstractPredicateEvaluator {
    public String getXPathExpression(Predicate p, EvaluationContext context) {
        final String from = p.get(„from“);
        final String to = p.get(„to“);

                     // build xpath snippet
                     return „@start = ,...‘ and @end = ,...‘“;
         }

         public String[] getOrderByProperties(Predicate predicate, EvaluationContext ctx) {
             return new String[] { „start“ };
         }

         public boolean canFilter(Predicate predicate, EvaluationContext context) {
             return false;
         }

         public boolean canXpath(Predicate predicate, EvaluationContext context) {
             return true;
         }
}

© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.   22   QueryBuilder - AdaptTo(Berlin) 2011
Filtering & Facet extraction

§   In addition or alternatively to xpath, a predicate can filter
§   goes over nodes in result and says include or drop

          public boolean includes(Predicate p, Row row, EvaluationContext context)




§   Facet extraction is „lazy“
§   Evaluator returns a FacetExtractor
§   Base implementations available
     §   PropertyFacetExtractor
          §   DistinctValuesFacetExtractor
          §   PredefinedBucketsFacetExtractor




© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.   23   QueryBuilder - AdaptTo(Berlin) 2011
Documentation

§   Basic docs plus some examples:
     §   http://wem.help.adobe.com/enterprise/en_US/10-0/wem/dam/
          customizing_and_extendingcq5dam/query_builder.html
§   Javadocs
     §   http://wem.help.adobe.com/enterprise/en_US/10-0/wem/javadoc/com/day/cq/search/
          package-summary.html




© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.   24   QueryBuilder - AdaptTo(Berlin) 2011
© 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.

Weitere ähnliche Inhalte

Was ist angesagt?

Document Object Model
Document Object ModelDocument Object Model
Document Object Model
chomas kandar
 

Was ist angesagt? (20)

Authenticating Angular Apps with JWT
Authenticating Angular Apps with JWTAuthenticating Angular Apps with JWT
Authenticating Angular Apps with JWT
 
REST API testing with SpecFlow
REST API testing with SpecFlowREST API testing with SpecFlow
REST API testing with SpecFlow
 
JQuery UI
JQuery UIJQuery UI
JQuery UI
 
Introduction to Sightly and Sling Models
Introduction to Sightly and Sling ModelsIntroduction to Sightly and Sling Models
Introduction to Sightly and Sling Models
 
Selenium cheat sheet
Selenium cheat sheetSelenium cheat sheet
Selenium cheat sheet
 
CORE JAVA
CORE JAVACORE JAVA
CORE JAVA
 
Document Object Model
Document Object ModelDocument Object Model
Document Object Model
 
Spring I/O 2012: Natural Templating in Spring MVC with Thymeleaf
Spring I/O 2012: Natural Templating in Spring MVC with ThymeleafSpring I/O 2012: Natural Templating in Spring MVC with Thymeleaf
Spring I/O 2012: Natural Templating in Spring MVC with Thymeleaf
 
ASP.MVC Training
ASP.MVC TrainingASP.MVC Training
ASP.MVC Training
 
PUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBootPUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBoot
 
AEM Sightly Template Language
AEM Sightly Template LanguageAEM Sightly Template Language
AEM Sightly Template Language
 
Angular 6 Form Validation with Material
Angular 6 Form Validation with MaterialAngular 6 Form Validation with Material
Angular 6 Form Validation with Material
 
Google Maps in Android
Google Maps in AndroidGoogle Maps in Android
Google Maps in Android
 
Springboot introduction
Springboot introductionSpringboot introduction
Springboot introduction
 
jQuery - Chapter 3 - Effects
jQuery - Chapter 3 - Effects  jQuery - Chapter 3 - Effects
jQuery - Chapter 3 - Effects
 
Nestjs MasterClass Slides
Nestjs MasterClass SlidesNestjs MasterClass Slides
Nestjs MasterClass Slides
 
Java 8 Lambda Expressions
Java 8 Lambda ExpressionsJava 8 Lambda Expressions
Java 8 Lambda Expressions
 
Java 8 lambda
Java 8 lambdaJava 8 lambda
Java 8 lambda
 
JPA and Hibernate
JPA and HibernateJPA and Hibernate
JPA and Hibernate
 
Asp.net.
Asp.net.Asp.net.
Asp.net.
 

Andere mochten auch

Basics of Solr and Solr Integration with AEM6
Basics of Solr and Solr Integration with AEM6Basics of Solr and Solr Integration with AEM6
Basics of Solr and Solr Integration with AEM6
DEEPAK KHETAWAT
 
Query Analyser , SQL Server Groups, Transact –SQL
Query Analyser , SQL Server Groups, Transact –SQLQuery Analyser , SQL Server Groups, Transact –SQL
Query Analyser , SQL Server Groups, Transact –SQL
Komal Batra
 
Addmi 10-query builder
Addmi 10-query  builderAddmi 10-query  builder
Addmi 10-query builder
odanyboy
 
Addmi 09.5-analysis ui-host-grouping
Addmi 09.5-analysis ui-host-groupingAddmi 09.5-analysis ui-host-grouping
Addmi 09.5-analysis ui-host-grouping
odanyboy
 

Andere mochten auch (20)

Quiery builder
Quiery builderQuiery builder
Quiery builder
 
Apache SOLR in AEM 6
Apache SOLR in AEM 6Apache SOLR in AEM 6
Apache SOLR in AEM 6
 
Basics of Solr and Solr Integration with AEM6
Basics of Solr and Solr Integration with AEM6Basics of Solr and Solr Integration with AEM6
Basics of Solr and Solr Integration with AEM6
 
Implementing Site Search in CQ5 / AEM
Implementing Site Search in CQ5 / AEMImplementing Site Search in CQ5 / AEM
Implementing Site Search in CQ5 / AEM
 
Virus and antivirus
Virus and antivirusVirus and antivirus
Virus and antivirus
 
AEM (CQ) Dispatcher Caching Webinar 2013
AEM (CQ) Dispatcher Caching Webinar 2013AEM (CQ) Dispatcher Caching Webinar 2013
AEM (CQ) Dispatcher Caching Webinar 2013
 
Query Analyser , SQL Server Groups, Transact –SQL
Query Analyser , SQL Server Groups, Transact –SQLQuery Analyser , SQL Server Groups, Transact –SQL
Query Analyser , SQL Server Groups, Transact –SQL
 
Addmi 10-query builder
Addmi 10-query  builderAddmi 10-query  builder
Addmi 10-query builder
 
Addmi 09.5-analysis ui-host-grouping
Addmi 09.5-analysis ui-host-groupingAddmi 09.5-analysis ui-host-grouping
Addmi 09.5-analysis ui-host-grouping
 
Do you need an external search platform for Adobe Experience Manager?
Do you need an external search platform for Adobe Experience Manager?Do you need an external search platform for Adobe Experience Manager?
Do you need an external search platform for Adobe Experience Manager?
 
Omnisearch in AEM 6.2 - Search All the Things
Omnisearch in AEM 6.2 - Search All the ThingsOmnisearch in AEM 6.2 - Search All the Things
Omnisearch in AEM 6.2 - Search All the Things
 
Aem dispatcher – tips & tricks
Aem dispatcher – tips & tricksAem dispatcher – tips & tricks
Aem dispatcher – tips & tricks
 
AEM (CQ) Dispatcher Security and CDN+Browser Caching
AEM (CQ) Dispatcher Security and CDN+Browser CachingAEM (CQ) Dispatcher Security and CDN+Browser Caching
AEM (CQ) Dispatcher Security and CDN+Browser Caching
 
AEM Best Practices for Component Development
AEM Best Practices for Component DevelopmentAEM Best Practices for Component Development
AEM Best Practices for Component Development
 
Dell cod.scr--
Dell cod.scr--Dell cod.scr--
Dell cod.scr--
 
Kanban boards step by step
Kanban boards step by stepKanban boards step by step
Kanban boards step by step
 
Introduction of Cloud computing
Introduction of Cloud computingIntroduction of Cloud computing
Introduction of Cloud computing
 
Slideshare ppt
Slideshare pptSlideshare ppt
Slideshare ppt
 
How to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & TricksHow to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & Tricks
 
Getting Started With SlideShare
Getting Started With SlideShareGetting Started With SlideShare
Getting Started With SlideShare
 

Ähnlich wie CQ5 QueryBuilder - .adaptTo(Berlin) 2011

Cloud Best Practices
Cloud Best PracticesCloud Best Practices
Cloud Best Practices
Eric Bottard
 
SXSW 2012 JavaScript MythBusters
SXSW 2012 JavaScript MythBustersSXSW 2012 JavaScript MythBusters
SXSW 2012 JavaScript MythBusters
Elena-Oana Tabaranu
 
Gradleintroduction 111010130329-phpapp01
Gradleintroduction 111010130329-phpapp01Gradleintroduction 111010130329-phpapp01
Gradleintroduction 111010130329-phpapp01
Tino Isnich
 
12 core technologies you should learn, love, and hate to be a 'real' technocrat
12 core technologies you should learn, love, and hate to be a 'real' technocrat12 core technologies you should learn, love, and hate to be a 'real' technocrat
12 core technologies you should learn, love, and hate to be a 'real' technocrat
Jonathan Linowes
 

Ähnlich wie CQ5 QueryBuilder - .adaptTo(Berlin) 2011 (20)

GlassFish REST Administration Backend
GlassFish REST Administration BackendGlassFish REST Administration Backend
GlassFish REST Administration Backend
 
GlassFish REST Administration Backend at JavaOne India 2012
GlassFish REST Administration Backend at JavaOne India 2012GlassFish REST Administration Backend at JavaOne India 2012
GlassFish REST Administration Backend at JavaOne India 2012
 
Writing Plugged-in Java EE Apps: Jason Lee
Writing Plugged-in Java EE Apps: Jason LeeWriting Plugged-in Java EE Apps: Jason Lee
Writing Plugged-in Java EE Apps: Jason Lee
 
UEMB200: Next Generation of Endpoint Management Architecture and Discovery Se...
UEMB200: Next Generation of Endpoint Management Architecture and Discovery Se...UEMB200: Next Generation of Endpoint Management Architecture and Discovery Se...
UEMB200: Next Generation of Endpoint Management Architecture and Discovery Se...
 
BP-6 Repository Customization Best Practices
BP-6 Repository Customization Best PracticesBP-6 Repository Customization Best Practices
BP-6 Repository Customization Best Practices
 
Java EE 6 workshop at Dallas Tech Fest 2011
Java EE 6 workshop at Dallas Tech Fest 2011Java EE 6 workshop at Dallas Tech Fest 2011
Java EE 6 workshop at Dallas Tech Fest 2011
 
OSGi Feature Model - Where Art Thou - David Bosschaert (Adobe)
OSGi Feature Model - Where Art Thou - David Bosschaert (Adobe)OSGi Feature Model - Where Art Thou - David Bosschaert (Adobe)
OSGi Feature Model - Where Art Thou - David Bosschaert (Adobe)
 
Cloud Best Practices
Cloud Best PracticesCloud Best Practices
Cloud Best Practices
 
Play framework
Play frameworkPlay framework
Play framework
 
Boston 2011 OTN Developer Days - Java EE 6
Boston 2011 OTN Developer Days - Java EE 6Boston 2011 OTN Developer Days - Java EE 6
Boston 2011 OTN Developer Days - Java EE 6
 
SXSW 2012 JavaScript MythBusters
SXSW 2012 JavaScript MythBustersSXSW 2012 JavaScript MythBusters
SXSW 2012 JavaScript MythBusters
 
Gradle Introduction
Gradle IntroductionGradle Introduction
Gradle Introduction
 
Gradleintroduction 111010130329-phpapp01
Gradleintroduction 111010130329-phpapp01Gradleintroduction 111010130329-phpapp01
Gradleintroduction 111010130329-phpapp01
 
[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVC[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVC
 
HTTP Caching and PHP
HTTP Caching and PHPHTTP Caching and PHP
HTTP Caching and PHP
 
Gradle talk, Javarsovia 2010
Gradle talk, Javarsovia 2010Gradle talk, Javarsovia 2010
Gradle talk, Javarsovia 2010
 
Plugin-based software design with Ruby and RubyGems
Plugin-based software design with Ruby and RubyGemsPlugin-based software design with Ruby and RubyGems
Plugin-based software design with Ruby and RubyGems
 
Google AppEngine (GAE/J) - Introduction and Overview from a Java Guy
Google AppEngine (GAE/J) - Introduction and Overview from a Java GuyGoogle AppEngine (GAE/J) - Introduction and Overview from a Java Guy
Google AppEngine (GAE/J) - Introduction and Overview from a Java Guy
 
12 core technologies you should learn, love, and hate to be a 'real' technocrat
12 core technologies you should learn, love, and hate to be a 'real' technocrat12 core technologies you should learn, love, and hate to be a 'real' technocrat
12 core technologies you should learn, love, and hate to be a 'real' technocrat
 
Greach 2019 - Creating Micronaut Configurations
Greach 2019 - Creating Micronaut ConfigurationsGreach 2019 - Creating Micronaut Configurations
Greach 2019 - Creating Micronaut Configurations
 

Kürzlich hochgeladen

Kürzlich hochgeladen (20)

Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source Milvus
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 

CQ5 QueryBuilder - .adaptTo(Berlin) 2011

  • 1. .adaptTo(Berlin) CQ5 QueryBuilder Alexander Klimetschek | Senior Developer, Day | @alexkli © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 1
  • 2. Agenda (1) What it looks like & Use Cases (2) Philosophy & Consequences (3) Debugging (4) Queries & Samples (5) Running Queries (6) Facets (7) Extending © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 2
  • 3. QueryBuilder - What it looks like § Search for jar files, and order them newest first: type=nt:file nodename=*.jar orderby=@jcr:content/jcr:lastModified orderby.sort=desc § As URL: http://localhost:4502/bin/querybuilder.json? type=nt:file&nodename=*.jar& orderby=@jcr:content/jcr:lastModified&orderby.sort=desc § Result as JSON: { success: true, results: 10, total: 155, offset: 0, hits: [{ path: "/apps/cloudmgr/install/cq-change-admin-pwd-1.0.1-SNAPSHOT.jar" excerpt: "application/java-archive" name: "cq-change-admin-pwd-1.0.1-SNAPSHOT.jar" .... },{...} ] } © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 3 QueryBuilder - AdaptTo(Berlin) 2011
  • 4. Use Cases!? § Advanced query forms § DAM Asset share § form-based elements § „querybuilder UI components“ § author can add/remove them individually § normal form POST or via AJAX § Content Finder would be cool.... § Search component in CQ (for facets) § Quick AJAX json query from the client side © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 4 QueryBuilder - AdaptTo(Berlin) 2011
  • 5. Philosophy § 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) § QueryBuilder is not... § a query engine itself § does not have its own search index § or even cache © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 5 QueryBuilder - AdaptTo(Berlin) 2011
  • 6. Consequences: URL parameters § Set of key = value pairs d er Java: hash maps, property files ry buil § ue b in/q :4 502/ .jar& odified al host name=* :lastM :/ /loc e&node nt/jcr § Keep it short for GET requests http nt:fil :conte = type by=@jcr r § as fallback, use POST to transport „long“ queries orde § but short queries are more readable => Avoid duplication in parameter names => Allow to write custom „shortcut“ predicates (extensible) § Order must be encoded in parameter names § HTML form GETs/POSTs are required to be in order § but the Java servlet spec gives you a hash map.... => Conflicts with short names above => Solution is not very intuitive the first time, but it works © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 6 QueryBuilder - AdaptTo(Berlin) 2011
  • 7. More Consequences § HTML checkbox behaviour § checked: field=on § not checked: <not sent with the request> § Predicates are separate entities § though grouping exists § Copy/paste § obvious one, but XPath for JCR does not respect it (limit & offset) § nothing that can only be done through an API call § global settings, given as p.offset=10 § Extensible § predicates evaluators as OSGi components § SCR registration to associate with predicate name © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 7 QueryBuilder - AdaptTo(Berlin) 2011
  • 8. QueryBuilder Debugger § http://localhost:4502/libs/cq/search/content/querydebug.html © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 8 QueryBuilder - AdaptTo(Berlin) 2011
  • 9. Debug logs § For all query builder executed queries § Set „com.day.cq.search“ to INFO or DEBUG or TRACE level § Standard INFO level (shortened): 15.09.2011 19:17:48.566 *INFO* ...QueryImpl executing query (URL): nodename=*.jar&type=nt%3afile 15.09.2011 19:17:48.566 *INFO* ...QueryImpl executing query (predicate tree): ROOT=group: [ {nodename=nodename: nodename=*.jar} {type=type: type=nt:file} ] 15.09.2011 19:17:48.567 *INFO* ...QueryImpl xpath query: //element(*, nt:file) 15.09.2011 19:17:48.569 *INFO* ...QueryImpl xpath query took 3 ms 15.09.2011 19:17:48.569 *INFO* ...QueryImpl filtering predicates: {nodename=nodename: nodename=*.jar} 15.09.2011 19:17:48.752 *INFO* ...QueryImpl >> xpath query returned 5098 results (counted) 15.09.2011 19:17:48.753 *INFO* ...QueryImpl filtering took 184 ms 15.09.2011 19:17:48.753 *INFO* ...QueryImpl >> after filtering there are 155 results 15.09.2011 19:17:48.753 *INFO* ...QueryImpl entire query execution took 187 ms § For production, set it to WARN or ERROR ;-) © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 9 QueryBuilder - AdaptTo(Berlin) 2011
  • 10. Anatomy of a query Predicate name and type and parameter Predicates type=cq:Page property=jcr:content/cq:template { property.value=/apps/geometrixx/templates/homepage Parameter Value Predicate‘s type is mirrored as parameter internally: type.type=cq:Page property.property=jcr:content/cq:template property.value=/apps/geometrixx/templates/homepage © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 10 QueryBuilder - AdaptTo(Berlin) 2011
  • 11. 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 © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 11 QueryBuilder - AdaptTo(Berlin) 2011
  • 12. Multiple predicates of the same type § Fixed numbering scheme § Name = <nr>_<type> § Allows to define an order § work around hash maps type=cq:Page 1_property=jcr:content/cq:template 1_property.value=/apps/geometrixx/templates/homepage 2_property=jcr:content/jcr:title 2_property.value=English § No custom names possible! © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 12 QueryBuilder - AdaptTo(Berlin) 2011
  • 13. Standard predicates § path § tagid & tag § supports multiple paths § language § but beware: can be slow § page languages § property § event § JCR property § calendar § different operations § example for shortening § type § node type § fulltext § full text search § range § daterange § similar § rep:similar © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 13 QueryBuilder - AdaptTo(Berlin) 2011
  • 14. 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 © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 14 QueryBuilder - AdaptTo(Berlin) 2011
  • 15. Grouping of predicates § Special group predicate fulltext=Management group.p.or=true group.1_path=/content/geometrixx/en group.2_path=/content/dam/geometrixx § Like brackets: § (fulltext AND (path=... OR path=...)) § Nested: fulltext=Management group.p.or=true group.1_group.path=/content/geometrixx/en group.1_group.type=cq:Page a re ! w ! Be w e s l o group.2_group.path=/content/dam/geometrixx C a n b group.2_group.type=dam:Asset § (ft AND ( (path= AND type=) OR (path= AND type=) )) © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 15 QueryBuilder - AdaptTo(Berlin) 2011
  • 16. Running queries § Default servlets § JSON: http://localhost:4502/bin/querybuilder.json § Atom feed: http://localhost:4502/bin/querybuilder.feed § iCalendar: http://localhost:4502/bin/querybuilder.ics § Java API PredicateGroup root = PredicateGroup.create(request.getParameterMap()); Query query = queryBuilder.createQuery(root, session); SearchResult result = query.getResult(); for (Hit hit : result.getHits()) { String path = hit.getPath(); // .... } © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 16 QueryBuilder - AdaptTo(Berlin) 2011
  • 17. JSON servlet § JSON: http://localhost:4502/bin/querybuilder.json § p.hits selects how the hits are written § simple § path, lastmodified, etc. only § full § full sling json rendering of node § by default entire subtree § p.nodedepth=1 as in sling‘s json (0 = infinity) § selective § p.properties is an array of properties to write § just the node itself © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 17 QueryBuilder - AdaptTo(Berlin) 2011
  • 18. Java API § From HTTP request: Session session = request.getResourceResolver().adaptTo(Session.class); PredicateGroup root = PredicateGroup.create(request.getParameterMap()); Query query = queryBuilder.createQuery(root, session); § From hash map: Map map = new HashMap(); map.put("path", "/content"); map.put("type", "nt:file"); Query query = builder.createQuery(PredicateGroup.create(map), session); § From predicates: PredicateGroup group = new PredicateGroup(); group.add(new Predicate("mypath", "path").set("path", "/content")); group.add(new Predicate("mytype", "type").set("type", "nt:file")); Query query = builder.createQuery(group, session); © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 18 QueryBuilder - AdaptTo(Berlin) 2011
  • 19. Persisted Queries § Store query § in Java properties file format § in the repository § as file node § or as string property Query query = .... // create query normally // store query as file queryBuilder.storeQuery(query, „/content/myquery“, true, session); // load it again Query query = queryBuilder.loadQuery(„/content/myquery“, session); § List component allows this © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 19 QueryBuilder - AdaptTo(Berlin) 2011
  • 20. 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... Map<String, Facet> facets = result.getFacets(); for (String key : facets.keySet()) { Facet facet = facets.get(key); if (facet.getContainsHit()) { writer.key(key).array(); for (Bucket bucket : facet.getBuckets()) { } } } © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 20 QueryBuilder - AdaptTo(Berlin) 2011
  • 21. Run new query based on facet/bucket § Simple as that: String bucketURL = query.refine(bucket).getPredicates().toURL(); § Facets are extracted for all predictes in the current query § keep them „empty“ if they should not search type=cq:Page 1_property=jcr:content/cq:template 1_property.value=/apps/geometrixx/templates/homepage 2_property=jcr:content/jcr:title No value for 2_property © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 21 QueryBuilder - AdaptTo(Berlin) 2011
  • 22. Extending: Writing custom predicate evaluators /** @scr.component metatype="no" * factory="com.day.cq.search.eval.PredicateEvaluator/event" */ public class EventPredicateEvaluator extends AbstractPredicateEvaluator { public String getXPathExpression(Predicate p, EvaluationContext context) { final String from = p.get(„from“); final String to = p.get(„to“); // build xpath snippet return „@start = ,...‘ and @end = ,...‘“; } public String[] getOrderByProperties(Predicate predicate, EvaluationContext ctx) { return new String[] { „start“ }; } public boolean canFilter(Predicate predicate, EvaluationContext context) { return false; } public boolean canXpath(Predicate predicate, EvaluationContext context) { return true; } } © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 22 QueryBuilder - AdaptTo(Berlin) 2011
  • 23. Filtering & Facet extraction § In addition or alternatively to xpath, a predicate can filter § goes over nodes in result and says include or drop public boolean includes(Predicate p, Row row, EvaluationContext context) § Facet extraction is „lazy“ § Evaluator returns a FacetExtractor § Base implementations available § PropertyFacetExtractor § DistinctValuesFacetExtractor § PredefinedBucketsFacetExtractor © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 23 QueryBuilder - AdaptTo(Berlin) 2011
  • 24. Documentation § Basic docs plus some examples: § http://wem.help.adobe.com/enterprise/en_US/10-0/wem/dam/ customizing_and_extendingcq5dam/query_builder.html § Javadocs § http://wem.help.adobe.com/enterprise/en_US/10-0/wem/javadoc/com/day/cq/search/ package-summary.html © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential. 24 QueryBuilder - AdaptTo(Berlin) 2011
  • 25. © 2011 Adobe Systems Incorporated. All Rights Reserved. Adobe Confidential.

Hinweis der Redaktion

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. \n
  88. \n
  89. \n
  90. \n
  91. \n
  92. \n
  93. \n
  94. \n
  95. \n
  96. \n
  97. \n
  98. \n
  99. \n
  100. \n
  101. \n
  102. \n
  103. \n
  104. \n
  105. \n
  106. \n
  107. \n
  108. \n
  109. \n
  110. \n
  111. \n
  112. \n
  113. \n
  114. \n
  115. \n
  116. \n
  117. \n
  118. \n
  119. \n
  120. \n
  121. \n
  122. \n
  123. \n
  124. \n
  125. \n
  126. \n
  127. \n
  128. \n