DOYUNG YOON created S2GRAPH-240:
-----------------------------------
Summary: Add management api for Experiment and Bucket.
Key: S2GRAPH-240
URL: https://issues.apache.org/jira/browse/S2GRAPH-240
Project: S2Graph
Issue Type: Improvement
Components: s2core
Reporter: DOYUNG YOON
h1. Background
Experiment and Bucket exist to support A/B bucket test.
Here is how they can be used for bucket test.
1. Experiment: Experiment represents a single API endpoint for experimenting
multiple buckets.
2. Create Bucket: Bucket contains single s2graph query template in JSON. it can
be thought of as the stored procedure.
A single experiment can have one to many buckets.
Without specifying the bucket name, experiment follows traffic ratio to select
which bucket to select the given user's POST request, which contains variables
need to be interpolated into stored query template in the selected bucket.
h2. Example.
Here is one example configuration for a single experiment.
{noformat}
Experiment 1:
Bucket A(1~99): 99% of requests will be lead to this bucket.
Bucket B(99~100): 1% of requests will be lead to this bucket.
{noformat}
Bucket A: following is example of s2graph query to recommend moivies for the
user.
{noformat}
{
"select": [
"movie_id"
],
"srcVertices": [
{
"serviceName": "s2graph",
"columnName": "user_id",
"id": "[[USER_ID]]"
}
],
"steps": [
{
"step": [
{
"label": "user_watched_movies",
"limit": 10
}
]
},
{
"step": [
{
"label": "similar_movie_model_x",
"limit": 10
}
]
}
]
}
{noformat}
Note that to test two logic, similar_movie_model_x and similar_movie_model_y,
we need to create two buckets, each per model.
Also, the changing part of this query is only `[[USER_ID]]`, so register
template as a bucket and client send only changing variables.
{noformat}
curl -XPOST -H 'Content-Type:application/json'
localhost:9000/graphs/experiment/access_token_for_this_experiment/experiment_name/id
-d '
{
"[[USER_ID]]": "steamshon"
}
'
{noformat}
Given user request, Experiment builds complete s2graph query mixing payload and
registered template which yield "similar movies to user watched".
This experiment includes `S2-Impression-Id`(bucket name) which indicate the
bucket name that built result. Once the user makes the conversion, the client
send feedback edge as follow.
{noformat}
{
"timestamp": "now",
"from": "user_id",
"to": "S2-Impression-Id value",
"label": "movie_recommend_feedback",
"props": {
"conversion_type": "imp/click/etc"
}
}
{noformat}
Once this data is available, we can decide which bucket is best based on real
user feedback.
h1. Suggestion
Since it is a handy feature, there is no management(CRUD) API on Bucket and
Experiment.
It would be great if we can polish this feature more.
1. support GraphQL in Bucket: would be better if we can use GraphQL query in
Bucket.
2. add management API.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)