Thursday, July 3, 2014

Sorting Search Results with Alfresco Solr


In Alfresco, we can configure our search subsystem to Solr.

During search we need to sort our result based on property. So here I would like to focus on sorting on property specifically when you define your custom property.

Sorting Search Results:

When you want to sort on specific property, you need to set “tokenised”. It should be set either “false” or “both”.

<index enabled=”true”>
<atomic>true</atomic>
<stored>false</stored>
<tokenised>false</tokenised>
</index>

By default “tokenised” is set to “true” and when you try to sort your result, Solr will throw below error

2014-06-30 13:23:06,768 ERROR [solr.core.SolrCore] [http-8443-5] java.lang.UnsupportedOperationException: Ordering not supported for @custom:myTestProperty

Sorting on Date and Date Range Query:

As mentioned above, if you want to sort your result based on any property, here specifically for 
d: datetime, you can either set its “tokenised” to “false” or “both”.

If you make your date property “tokenised” to “false” then soring will work but it will NOT allow you to search on range query.

This query won’t give you any result with “tokenised “to “false”: 
@custom\:myTestDate:[2011-06-13 TO 2014-06-01]

So you need to set “Tokenised” to “both” so your sorting and range query both will work.

Numeric Sort:

In some scenario, You need to sort your search result numerically for an example for d:int type of property.

If you set “Tokenised” to “false” for your numeric property then Solr will sort results in lexical order [same as your text property ex: cm:name] rather than numeric order.

So to sort your results numerically you need to make “Tokenised” to “both”.

In Lucene, you can sort result regardless of “Tokenised” setting. If you are moving your search sub-system from Lucene to Solr then you need to make sure for “Tokenised” settings.

Whenever you make any change in your content model, need to re-build indexes so you need to make sure for searching and sorting requirement in advance.



No comments:

Post a Comment