Hi all,

We have two methods in AnalyticsDataService namely "search" and
"getDrillDownRecords". These two methods returns record Ids sorted by the
Relevance score ( Relevance score is generated by Lucene at the search
time. Record ids that match most with the given search query will have a
higher score and will be the first records that comes first in the result
list). With the new sorting functionality, the matching records can be
retrieved either descending or ascending sort order of a specific field/s.

Followings are the new search methods added to AnalyticsDataService.

List<SearchResultEntry> search(int tenantId, String tableName, String
query, int start, int count, *List<SortByField> sortByFields*) throws
AnalyticsException
List<SearchResultEntry> drillDownSearch(int tenantId,
AnalyticsDrillDownRequest request) throws AnalyticsIndexException

The last parameter to search method is srotByField. This is a list which
contains the fields by which the users wants to sort the records.
SortByField class will have the 3 attributes, fieldName, sortType,
isReversed.

1. *fieldName* is the field by which the records need to be sorted.
2. *sortType* is either SORT.ASC or SORT.DESC (Denotes ascending or
descending)
3. *isRevesed* says whether the sorted records need to be returned reversed
in order or not. (optional)

Search APIs take a list of SortByFields, which means the records can be
sorted by multiple fields. Records will be sorted by the second SortByField
if the value for the first SortByField is same.




*REST APIs*


*Search*
Analytics REST call[1] now has an additional parameter call "sortBy" to
support sorting. A sample request payload will look like below.

POST https://localhost:9443/analytics/search

{
 "tableName" : "Students",
  "query" : "Grade:10",
 "start" : 0,
 "count" : 100,
  "sortBy" : [{
    "field" : "totalScore",
    "sortType" : "DESC" //can be DESC or ASC
    "reversed" : false //optional
  }]
}

Above will return the matching records sorted by totalScore field in
descending order.



*Drilldown*
Drilldown API[2] also supports sorting. Following is a sample request on
how to sort the students whose City is Colombo and who are in Grade 10 in
descending order.

POST https://localhost:9443/analytics/drilldown

{
   "tableName":"Students",
   "categories":[
      {
         "fieldName":"location",
         "path":["Sri Lanka", "Colombo]
      }
   ],
   "query":"Grade:10",
   "recordCount":100,
   "sortBy":[
      {
         "field":"totalScore",
         "sortType":"DESC"
      }
   ]
}



*Javascript APIs*

Javascript APIs is used at client side for custom development based on DAS.

*Search*

Search method[3] in Javascript APIs has an additional parameter to pass
sort information to get sorted records. Following is a sample JS call to
get sorted records.

var queryInfo = {
               tableName : "Students",
               searchParams : {
                   query : "Grade : 10",
                   start : 0,
                   count : 100,
                   sortBy : [
                     {
                       field : "totalScore",
                       sortType : "DESC", // This can be ASC, DESC
                       reversed : "false" //optional
                     }
                   ]
               }
           };

client.search(queryInfo, function(data) {
        console.log (data["message"]);
}, function(error) {
        console.log("error occured: " + error["message"]);
});


*DrillDown*
Using DrillDown API[4] in JS APIs, we can achieve the same as REST
DrillDown API. Following is a sample request on how to sort the students
whose City is Colombo and who are in Grade 10 in descending order.

var drillDownReq = {
               tableName : "Students",
               drillDownInfo : {
                   categories : [
                    {
                       fieldName : "location",
                       path : ["Srilanka", "Colombo"]
                   }]
                   query : "Grade : 10",
                   recordStart : 0,
                   recordCount : 100,
                   sortBy : [
                     {
                       field : "totalScore",
                       sortType : "DESC", // This can be ASC, DESC
                       reversed : "false" //optional
                     }
                   ]
               };

client.drillDownSearch(drillDownReq, function(data) {
      console.log (data["message"]);
}, function(error) {
      console.log("error occured: " + error);
});

Please note that the fields that you wants records to be sorted by, need to
be indexed beforehand.

[1]
https://docs.wso2.com/display/DAS301/Retrieving+Specific+Records+through+a+Drill+Down+Search+via+REST+API
[2]
https://docs.wso2.com/display/DAS301/Retrieving+All+Records+Matching+the+Given+Search+Query+via+REST+API
[3]
https://docs.wso2.com/display/DAS301/Retrieving+All+Records+Matching+the+Given+Search+Query+via+JS+API
[4]
https://docs.wso2.com/display/DAS301/Retrieving+Specific+Records+through+a+Drill+Down+Search+via+JS+API

-- 
Gimantha Bandara
Software Engineer
WSO2. Inc : http://wso2.com
Mobile : +94714961919
_______________________________________________
Architecture mailing list
[email protected]
https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture

Reply via email to