Lucene Index for Querybuilder query | Community
Skip to main content
Level 2
August 12, 2022
Solved

Lucene Index for Querybuilder query

  • August 12, 2022
  • 3 replies
  • 1304 views

Hi Team,

 

I have to create a lucene Index for a query.

 

The query returns the page (the page should be created with contentpage template)which matches the id(stored at component node ).

 

The query is given below.

 

type=cq:Page

path=content/mysite/country/locale

property1=jcr:content/cq:template

property1.value=conf/mysite/wcm/settings/contentpage-template

property2=jcr:content/root/container/feature/Id

property2.value=1234589

 

 

Note: feature is my component and Id is the property stored at feature component node.

 

 

I want to create a lucene Index for query. Here in my query, country, locale and id are dynamic values , which i am using a sling servlet to achieve this.

 

Thanks in advance 

 

 

 

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
Best answer by DEBAL_DAS

You need to follow this 4 steps  approach -

 

Step 1: Use AEM query builder debugger url http://localhost:4502/libs/cq/search/content/querydebug.html to generate xpath query as shown below -

 

Query builder query -

type=cq:Page

path=/content/mysite/country/locale

1_property=jcr:content/cq:template

1_property.value=/conf/mysite/wcm/settings/contentpage-template

2_property=jcr:content/root/container/feature/Id

2_property.value=1234589

Xpath query -

/jcr:root/content/mysite/country/locale//element(*, cq:Page)
[
(jcr:content/@cq:template = '/conf/mysite/wcm/settings/contentpage-template' and jcr:content/root/container/feature/@Id = '1234589')
]

Step 2: Please copy the above mentioned Xpath query and paste into Oak Index Definition Generator [https://oakutils.appspot.com/generate/index] as shown below -

 

Index details has been given below -

Index details -

  - compatVersion = 2
  - async = "async"
  - jcr:primaryType = oak:QueryIndexDefinition
  - evaluatePathRestrictions = true
  - type = "lucene"
  + indexRules 
   + cq:Page 
    + properties 
     + template 
      - name = "jcr:content/cq:template"
      - propertyIndex = true
     + Id 
      - name = "jcr:content/root/container/feature/Id"
      - propertyIndex = true

Step 3: 

Now you need to add below node and property under /oak:index/cqPageLucene/indexRules/cq:Page/properties  -

 template 
      - name = "jcr:content/cq:template"
      - propertyIndex = true
     + Id 
      - name = "jcr:content/root/container/feature/Id"
      - propertyIndex = true

Step 4: 

 

Now you need to initiate reindexing by making reindex [Boolean] true as shown below -

 

 

3 replies

Sachin_Arora_
Community Advisor
Community Advisor
August 13, 2022

You can use this Oak Index Definition Generator. It will help you generate index definition as per your query. As query is for type cq:Page, its index is already there and you need to just update your properties in it, path=/oak:index/cqPageLucene

https://oakutils.appspot.com/generate/index

Once you add the properties in cqPageLucene, you can validate your query here : /libs/granite/operations/content/diagnosistools/queryPerformance.html. It will explain your query.

Also you need to reindex cqPageLucene by setting reindex=true.

Corrected Query
type=cq:Page
path=/content/mysite/country/locale
1_property=jcr:content/cq:template
1_property.value=/conf/mysite/settings/wcm/templates/page-template
2_property=jcr:content/root/container/feature/Id
2_property.value=1234589

 

HeenaMadan
Community Advisor and Adobe Champion
Community Advisor and Adobe Champion
August 13, 2022

Create oak:index for properties which has dynamic values country, locale and id.

create _oak_index folder inside "project/ui.apps\src\main\content\jcr_root"

in content.xml, add below properties which you want to index

 

<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:oak="http://jackrabbit.apache.org/oak/ns/1.0" xmlns:cq="http://www.day.com/jcr/cq/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0" xmlns:rep="internal"
jcr:mixinTypes="[rep:AccessControllable]"
jcr:primaryType="nt:unstructured">
<socialLucene/>
<cmLucene-2/>
<slingeventJob/>
<jcrLanguage/>
<cqPageLucene-custom-1
jcr:primaryType="oak:QueryIndexDefinition"
async="[async,nrt]"
compatVersion="{Long}2"
evaluatePathRestrictions="{Boolean}true"
excludedPaths="[/var,/etc/replication,/etc/workflow/instances,/jcr:system]"
reindex="{Boolean}false"
reindexCount="{Long}2"
seed="{Long}-900421530849754201"
type="lucene">
<aggregates jcr:primaryType="nt:unstructured">
<cq:Page jcr:primaryType="nt:unstructured">
<include0
jcr:primaryType="nt:unstructured"
path="jcr:content"
relativeNode="{Boolean}true"/>
</cq:Page>
<nt:file jcr:primaryType="nt:unstructured">
<include0
jcr:primaryType="nt:unstructured"
path="jcr:content"/>
</nt:file>
<cq:PageContent jcr:primaryType="nt:unstructured">
<include0
jcr:primaryType="nt:unstructured"
path="*"/>
<include1
jcr:primaryType="nt:unstructured"
path="*/*"/>
<include2
jcr:primaryType="nt:unstructured"
path="*/*/*"/>
<include3
jcr:primaryType="nt:unstructured"
path="*/*/*/*"/>
</cq:PageContent>
</aggregates>
<indexRules jcr:primaryType="nt:unstructured">
<cq:Page jcr:primaryType="nt:unstructured">
<properties jcr:primaryType="nt:unstructured">
<country
jcr:primaryType="nt:unstructured"
name="jcr:content/country"
notNullCheckEnabled="{Boolean}true"
propertyIndex="{Boolean}true"
type="String"/>
<id
jcr:primaryType="nt:unstructured"
name="jcr:content/id"
propertyIndex="{Boolean}true"
type="String"/>
<locale
jcr:primaryType="nt:unstructured"
name="jcr:content/locale"
propertyIndex="{Boolean}true"
type="String"/>
</properties>
</cq:Page>
</indexRules>
</cqPageLucene-custom-1>
<ntFolderDamLucene-2/>
<versionStoreIndex/>
<repMembers/>
<cqReportsLucene/>
<commerceLucene/>
<damAssetLucene-6/>
<damCollectionLucene-2/>
<counter/>
<authorizables/>
<internalVerificationLucene/>
<enablementResourceName/>
<lucene-2/>
<externalPrincipalNames/>
<damAssetStateIndex-2/>
<cqProjectLucene/>
<experienceFragmentsIndex-2/>
<acPrincipalName/>
<cqPageLucene/>
<uuid/>
<ntBaseLucene-2/>
<pathReference/>
<rep:policy/>
<workflowDataLucene-2/>
<cqPayloadPath/>
<appsLibsLucene/>
<nodetypeLucene/>
<nodetype/>
<reference/>
<screensSmartSyncJcrPrimaryType/>
<principalName/>
<cqTagLucene/>
<repTokenIndex/>
<externalId/>
<authorizableId/>
<packageLucene/>
<screensContentJcrPrimaryType/>
</jcr:root>

Inside "project/ui.apps\src\main\content\META-INF\valut.xml", add below line 

<?xml version="1.0" encoding="UTF-8"?>
<workspaceFilter version="1.0">
<filter root="/oak:index/cqPageLucene-custom-1" />
</workspaceFilter>

In ui.apps.structure pom.xml, Add below line

<filter><root>/oak:index</root></filter>

For more details Refer https://experienceleague.adobe.com/docs/experience-manager-cloud-service/content/operations/indexing.html?lang=en

 

 

DEBAL_DAS
DEBAL_DASAccepted solution
New Member
August 14, 2022

You need to follow this 4 steps  approach -

 

Step 1: Use AEM query builder debugger url http://localhost:4502/libs/cq/search/content/querydebug.html to generate xpath query as shown below -

 

Query builder query -

type=cq:Page

path=/content/mysite/country/locale

1_property=jcr:content/cq:template

1_property.value=/conf/mysite/wcm/settings/contentpage-template

2_property=jcr:content/root/container/feature/Id

2_property.value=1234589

Xpath query -

/jcr:root/content/mysite/country/locale//element(*, cq:Page)
[
(jcr:content/@cq:template = '/conf/mysite/wcm/settings/contentpage-template' and jcr:content/root/container/feature/@Id = '1234589')
]

Step 2: Please copy the above mentioned Xpath query and paste into Oak Index Definition Generator [https://oakutils.appspot.com/generate/index] as shown below -

 

Index details has been given below -

Index details -

  - compatVersion = 2
  - async = "async"
  - jcr:primaryType = oak:QueryIndexDefinition
  - evaluatePathRestrictions = true
  - type = "lucene"
  + indexRules 
   + cq:Page 
    + properties 
     + template 
      - name = "jcr:content/cq:template"
      - propertyIndex = true
     + Id 
      - name = "jcr:content/root/container/feature/Id"
      - propertyIndex = true

Step 3: 

Now you need to add below node and property under /oak:index/cqPageLucene/indexRules/cq:Page/properties  -

 template 
      - name = "jcr:content/cq:template"
      - propertyIndex = true
     + Id 
      - name = "jcr:content/root/container/feature/Id"
      - propertyIndex = true

Step 4: 

 

Now you need to initiate reindexing by making reindex [Boolean] true as shown below -

 

 

Debal Das, Senior AEM Consultant