Issue on fetching results of search result of asset share commons | Community
Skip to main content
Level 6
July 5, 2022
Solved

Issue on fetching results of search result of asset share commons

  • July 5, 2022
  • 2 replies
  • 1557 views

Hi,

I added search results component , I configured the Property filter in operation field I choosen DOES NOT EQUALS I saved it and closed the property filter. Then after in property filter I selected Images,presentation,document, I have to get non image, non presentation, non document files as result but in search result I am getting images, presentation, document files as well as with video files. 

Can anyone help me on this issue.

 

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 lukasz-m

Hi @vani1012,

This is correct behavior. Referring to official documentation, you can see that Property filter use OR for multiple values:


Comma delimited values are evaluated as OR’s.


Above can be easily confirmed checking implementation:

Now, if you have a look how predicate is evaluated into query you will get below values:

Query string:

http://localhost:4502/editor.html/content/asset-share-commons/en/light.html?1_group.propertyvalues.property=.%2Fjcr%3Acontent%2Fmetadata%2Fdc%3Aformat&1_group.propertyvalues.operation=unequals&1_group.propertyvalues.0_values=image%2Fjpeg%2Cimage%2Fgif%2Cimage%2Fpng%2Cimage%2Ftiff%2Cimage%2Fvnd.adobe.photoshop%2Capplication%2Fpostscript&1_group.propertyvalues.1_values=application%2Fvnd.openxmlformats-officedocument.wordprocessingml.document%2Capplication%2Fpdf%2Ctext%2Fplain&1_group.propertyvalues.3_values=application%2Fvnd.openxmlformats-officedocument.presentationml.presentation&orderby=%40jcr%3Acontent%2Fjcr%3AlastModified&orderby.sort=desc&layout=card&p.offset=0&p.limit=24

This evaluates to following predicate tree:

ROOT=group: limit=24, guessTotal=100, offset=0[
    {orderby=orderby: orderby=@jcr:content/jcr:lastModified, sort=desc}
    {type=type: type=dam:Asset}
    {2_group=group: or=true[
        {0_path=path: path=/content/dam/asset-share-commons/en/public}
        {1_path=path: path=/content/dam/we-retail/en}
    ]}
    {4_group=group: [
        {mainasset=mainasset: mainasset=true}
    ]}
    {5_group=group: [
        {property=property: property=jcr:content/contentFragment, operation=not}
    ]}
    {8_group=group: [
        {1_propertyvalues=propertyvalues: property=./jcr:content/metadata/dc:format, operation=unequals, 0_values=image/jpeg,image/gif,image/png,image/tiff,image/vnd.adobe.photoshop,application/postscript, 1_values=application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/pdf,text/plain, 3_values=application/vnd.openxmlformats-officedocument.presentationml.presentation}
    ]}
]

Finally you will get xPath like this:

(/jcr:root/content/dam/asset-share-commons/en/public//element(*, dam:Asset)[(not(jcr:content/@contentFragment)) and ((_x002e_/jcr:content/metadata/@dc:format != 'image/tiff' or _x002e_/jcr:content/metadata/@dc:format != 'image/png' or _x002e_/jcr:content/metadata/@dc:format != 'application/vnd.openxmlformats-officedocument.presentationml.presentation' or _x002e_/jcr:content/metadata/@dc:format != 'image/vnd.adobe.photoshop' or _x002e_/jcr:content/metadata/@dc:format != 'text/plain' or _x002e_/jcr:content/metadata/@dc:format != 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' or _x002e_/jcr:content/metadata/@dc:format != 'application/postscript' or _x002e_/jcr:content/metadata/@dc:format != 'image/jpeg' or _x002e_/jcr:content/metadata/@dc:format != 'application/pdf' or _x002e_/jcr:content/metadata/@dc:format != 'image/gif'))] | /jcr:root/content/dam/we-retail/en//element(*, dam:Asset)[(not(jcr:content/@contentFragment)) and ((_x002e_/jcr:content/metadata/@dc:format != 'image/tiff' or _x002e_/jcr:content/metadata/@dc:format != 'image/png' or _x002e_/jcr:content/metadata/@dc:format != 'application/vnd.openxmlformats-officedocument.presentationml.presentation' or _x002e_/jcr:content/metadata/@dc:format != 'image/vnd.adobe.photoshop' or _x002e_/jcr:content/metadata/@dc:format != 'text/plain' or _x002e_/jcr:content/metadata/@dc:format != 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' or _x002e_/jcr:content/metadata/@dc:format != 'application/postscript' or _x002e_/jcr:content/metadata/@dc:format != 'image/jpeg' or _x002e_/jcr:content/metadata/@dc:format != 'application/pdf' or _x002e_/jcr:content/metadata/@dc:format != 'image/gif'))]) order by jcr:content/@jcr:lastModified descending

Analyzing above information you can clearly see how query has been build. What is key, is a fact that OR condition is used instead of AND - this is of course aligned with information from documentation. To achieve your case you will need AND in your condition.

You can do a simple test running SQL2 query from crx, just compere results of below two queries.

  • query #1
    SELECT * FROM [dam:Asset] AS s WHERE (s.[jcr:content/metadata/dc:format] <> "image/png" OR s.[jcr:content/metadata/dc:format] <> "image/jpeg")
  • query #2
    SELECT * FROM [dam:Asset] AS s WHERE (s.[jcr:content/metadata/dc:format] <> "image/png" AND s.[jcr:content/metadata/dc:format] <> "image/jpeg")

Due to the fact Asset Share Commons does not provide Property filter with AND option, you will need to build your own component and predicate evaluator that will use AND condition. In general you could use exactly the same implementation like the one in Asset Share Commons but changing OR to AND.

Here are some references to Asset Share Commons code:

2 replies

lukasz-m
Community Advisor
lukasz-mCommunity AdvisorAccepted solution
Community Advisor
July 21, 2022

Hi @vani1012,

This is correct behavior. Referring to official documentation, you can see that Property filter use OR for multiple values:


Comma delimited values are evaluated as OR’s.


Above can be easily confirmed checking implementation:

Now, if you have a look how predicate is evaluated into query you will get below values:

Query string:

http://localhost:4502/editor.html/content/asset-share-commons/en/light.html?1_group.propertyvalues.property=.%2Fjcr%3Acontent%2Fmetadata%2Fdc%3Aformat&1_group.propertyvalues.operation=unequals&1_group.propertyvalues.0_values=image%2Fjpeg%2Cimage%2Fgif%2Cimage%2Fpng%2Cimage%2Ftiff%2Cimage%2Fvnd.adobe.photoshop%2Capplication%2Fpostscript&1_group.propertyvalues.1_values=application%2Fvnd.openxmlformats-officedocument.wordprocessingml.document%2Capplication%2Fpdf%2Ctext%2Fplain&1_group.propertyvalues.3_values=application%2Fvnd.openxmlformats-officedocument.presentationml.presentation&orderby=%40jcr%3Acontent%2Fjcr%3AlastModified&orderby.sort=desc&layout=card&p.offset=0&p.limit=24

This evaluates to following predicate tree:

ROOT=group: limit=24, guessTotal=100, offset=0[
    {orderby=orderby: orderby=@jcr:content/jcr:lastModified, sort=desc}
    {type=type: type=dam:Asset}
    {2_group=group: or=true[
        {0_path=path: path=/content/dam/asset-share-commons/en/public}
        {1_path=path: path=/content/dam/we-retail/en}
    ]}
    {4_group=group: [
        {mainasset=mainasset: mainasset=true}
    ]}
    {5_group=group: [
        {property=property: property=jcr:content/contentFragment, operation=not}
    ]}
    {8_group=group: [
        {1_propertyvalues=propertyvalues: property=./jcr:content/metadata/dc:format, operation=unequals, 0_values=image/jpeg,image/gif,image/png,image/tiff,image/vnd.adobe.photoshop,application/postscript, 1_values=application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/pdf,text/plain, 3_values=application/vnd.openxmlformats-officedocument.presentationml.presentation}
    ]}
]

Finally you will get xPath like this:

(/jcr:root/content/dam/asset-share-commons/en/public//element(*, dam:Asset)[(not(jcr:content/@contentFragment)) and ((_x002e_/jcr:content/metadata/@dc:format != 'image/tiff' or _x002e_/jcr:content/metadata/@dc:format != 'image/png' or _x002e_/jcr:content/metadata/@dc:format != 'application/vnd.openxmlformats-officedocument.presentationml.presentation' or _x002e_/jcr:content/metadata/@dc:format != 'image/vnd.adobe.photoshop' or _x002e_/jcr:content/metadata/@dc:format != 'text/plain' or _x002e_/jcr:content/metadata/@dc:format != 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' or _x002e_/jcr:content/metadata/@dc:format != 'application/postscript' or _x002e_/jcr:content/metadata/@dc:format != 'image/jpeg' or _x002e_/jcr:content/metadata/@dc:format != 'application/pdf' or _x002e_/jcr:content/metadata/@dc:format != 'image/gif'))] | /jcr:root/content/dam/we-retail/en//element(*, dam:Asset)[(not(jcr:content/@contentFragment)) and ((_x002e_/jcr:content/metadata/@dc:format != 'image/tiff' or _x002e_/jcr:content/metadata/@dc:format != 'image/png' or _x002e_/jcr:content/metadata/@dc:format != 'application/vnd.openxmlformats-officedocument.presentationml.presentation' or _x002e_/jcr:content/metadata/@dc:format != 'image/vnd.adobe.photoshop' or _x002e_/jcr:content/metadata/@dc:format != 'text/plain' or _x002e_/jcr:content/metadata/@dc:format != 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' or _x002e_/jcr:content/metadata/@dc:format != 'application/postscript' or _x002e_/jcr:content/metadata/@dc:format != 'image/jpeg' or _x002e_/jcr:content/metadata/@dc:format != 'application/pdf' or _x002e_/jcr:content/metadata/@dc:format != 'image/gif'))]) order by jcr:content/@jcr:lastModified descending

Analyzing above information you can clearly see how query has been build. What is key, is a fact that OR condition is used instead of AND - this is of course aligned with information from documentation. To achieve your case you will need AND in your condition.

You can do a simple test running SQL2 query from crx, just compere results of below two queries.

  • query #1
    SELECT * FROM [dam:Asset] AS s WHERE (s.[jcr:content/metadata/dc:format] <> "image/png" OR s.[jcr:content/metadata/dc:format] <> "image/jpeg")
  • query #2
    SELECT * FROM [dam:Asset] AS s WHERE (s.[jcr:content/metadata/dc:format] <> "image/png" AND s.[jcr:content/metadata/dc:format] <> "image/jpeg")

Due to the fact Asset Share Commons does not provide Property filter with AND option, you will need to build your own component and predicate evaluator that will use AND condition. In general you could use exactly the same implementation like the one in Asset Share Commons but changing OR to AND.

Here are some references to Asset Share Commons code: