Thomas Draier created UNOMI-134:
-----------------------------------

             Summary: Added personalized sort feature in ContextServlet
                 Key: UNOMI-134
                 URL: https://issues.apache.org/jira/browse/UNOMI-134
             Project: Apache Unomi
          Issue Type: New Feature
          Components: web
            Reporter: Thomas Draier
            Assignee: Thomas Draier
            Priority: Normal


Hi,

In order to use unomi to personalization, we currently rely on the "filter" 
feature of the ContextServlet. This field allows to ask unomi if a condition is 
matched or not by the current user/session. This is however quite limited to do 
complex personalization - we don't only want to know if a content matches/does 
not match a user, but rather know which content matches "best". Instead of 
simple a yes/no filter.

I suggest we add a new field in the ContextRequest, that would allow to ask 
unomi for a sort. Unomi could have different (pluggable) strategies to do the 
sort.

As an example, the "score" strategy could sort the items based "scoring plan" 
like condition - each item is associated a list of condition-score pairs - 
score with matching conditions are summed up and items sorted based on the 
final score value.

Context request could look like : 

{{
{
  ...
  "source" : .. , 
  "events" : [ ... ],
  "sorts" : [
    {
      "id":"mysort",
      "strategy": "score",
      "strategyOptions": {
        "threshold" : 10
      },
      "contents" : [
        {
          "filterid": "item1",
          "filters": [
            {
              "condition": {
                "parameterValues": {
                  "segments": [
                    "_nfpvub955"
                  ],
                  "matchType": "all"
                },
                "type": "profileSegmentCondition"
              },
              "properties": {
                "score":25
              }
            }
          ]
        },
        {
          "filterid": "item2",
          "filters": [
            {
              "condition": {
                "type": "deviceCategoryCondition",
                "parameterValues": {
                  "deviceCategories": [
                    "PDA",
                    "Personal computer"
                  ],
                  "matchType": "in"
                }
              },
              "properties": {
                "score":100
              }
            }
          ]
        }
      ]
    }
  ]
 ...
}
}}

Based on the results, unomi will return the sorted list :

{{ 
{ 
  ...
  "sortResults":{"mysort":["item1","item2"]}
  ...
}
}}

Strategies would be implemented as dedicated classes, taking the Sort object as 
parameter, returning sorted list of ids.

Other simpler strategies that could be used for personalization could be a 
simple "filter" (as the current filter field, will just filter the list based 
on the fact a condition is matched or not, but keep the order), or "random" 
(same as filter, but randomly sort the results at the end)





--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to