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)