http://git-wip-us.apache.org/repos/asf/predictionio-site/blob/6e02047e/templates/ecommercerecommendation/quickstart/index.html
----------------------------------------------------------------------
diff --git a/templates/ecommercerecommendation/quickstart/index.html
b/templates/ecommercerecommendation/quickstart/index.html
index a845ac1..eb3aa8d 100644
--- a/templates/ecommercerecommendation/quickstart/index.html
+++ b/templates/ecommercerecommendation/quickstart/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html><head><title>Quick Start - E-Commerce Recommendation
Engine Template</title><meta charset="utf-8"/><meta content="IE=edge,chrome=1"
http-equiv="X-UA-Compatible"/><meta name="viewport"
content="width=device-width, initial-scale=1.0"/><meta class="swiftype"
name="title" data-type="string" content="Quick Start - E-Commerce
Recommendation Engine Template"/><link rel="canonical"
href="https://predictionio.apache.org/templates/ecommercerecommendation/quickstart/"/><link
href="/images/favicon/normal-b330020a.png" rel="shortcut icon"/><link
href="/images/favicon/apple-c0febcf2.png" rel="apple-touch-icon"/><link
href="//fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800"
rel="stylesheet"/><link
href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css"
rel="stylesheet"/><link href="/stylesheets/application-eccfc6cb.css"
rel="stylesheet" type="text/css"/><script src="//cdnjs.cloudflare.com/ajax
/libs/html5shiv/3.7.2/html5shiv.min.js"></script><script
src="//cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script><script
src="//use.typekit.net/pqo0itb.js"></script><script>try{Typekit.load({ async:
true });}catch(e){}</script></head><body><div id="global"><header><div
class="container" id="header-wrapper"><div class="row"><div
class="col-sm-12"><div id="logo-wrapper"><span id="drawer-toggle"></span><a
href="#"></a><a href="http://predictionio.apache.org/"><img alt="Apache
PredictionIO" id="logo"
src="/images/logos/logo-ee2b9bb3.png"/></a><span>®</span></div><div
id="menu-wrapper"><div id="pill-wrapper"><a class="pill left"
href="/gallery/template-gallery">TEMPLATES</a> <a class="pill right"
href="//github.com/apache/predictionio/">OPEN SOURCE</a></div></div><img
class="mobile-search-bar-toggler hidden-md hidden-lg"
src="/images/icons/search-glass-704bd4ff.png"/></div></div></div></header><div
id="search-bar-row-wrapper"><div class="container-fluid"
id="search-bar-row"><div class="row"><div class="col-md-9 col-sm-11
col-xs-11"><div class="hidden-md hidden-lg"
id="mobile-page-heading-wrapper"><p>PredictionIO Docs</p><h4>Quick Start -
E-Commerce Recommendation Engine Template</h4></div><h4 class="hidden-sm
hidden-xs">PredictionIO Docs</h4></div><div class="col-md-3 col-sm-1 col-xs-1
hidden-md hidden-lg"><img id="left-menu-indicator"
src="/images/icons/down-arrow-dfe9f7fe.png"/></div><div class="col-md-3
col-sm-12 col-xs-12 swiftype-wrapper"><div class="swiftype"><form
class="search-form"><img class="search-box-toggler hidden-xs hidden-sm"
src="/images/icons/search-glass-704bd4ff.png"/><div class="search-box"><img
src="/images/icons/search-glass-704bd4ff.png"/><input type="text"
id="st-search-input" class="st-search-input" placeholder="Search
Doc..."/></div><img class="swiftype-row-hider hidden-md hidden-lg"
src="/images/icons/drawer-toggle-active-fcbef12a.png"/></form></div></div><div
class="mobile-left-menu-toggler hidden-md hid
den-lg"></div></div></div></div><div id="page" class="container-fluid"><div
class="row"><div id="left-menu-wrapper" class="col-md-3"><nav
id="nav-main"><ul><li class="level-1"><a class="expandible"
href="/"><span>Apache PredictionIO® Documentation</span></a><ul><li
class="level-2"><a class="final" href="/"><span>Welcome to Apache
PredictionIO®</span></a></li></ul></li><li class="level-1"><a
class="expandible" href="#"><span>Getting Started</span></a><ul><li
class="level-2"><a class="final" href="/start/"><span>A Quick
Intro</span></a></li><li class="level-2"><a class="final"
href="/install/"><span>Installing Apache PredictionIO</span></a></li><li
class="level-2"><a class="final" href="/start/download/"><span>Downloading an
Engine Template</span></a></li><li class="level-2"><a class="final"
href="/start/deploy/"><span>Deploying Your First Engine</span></a></li><li
class="level-2"><a class="final" href="/start/customize/"><span>Customizing the
Engine</span></a></li></ul></li><li cla
ss="level-1"><a class="expandible" href="#"><span>Integrating with Your
App</span></a><ul><li class="level-2"><a class="final"
href="/appintegration/"><span>App Integration Overview</span></a></li><li
class="level-2"><a class="expandible" href="/sdk/"><span>List of
SDKs</span></a><ul><li class="level-3"><a class="final"
href="/sdk/java/"><span>Java & Android SDK</span></a></li><li
class="level-3"><a class="final" href="/sdk/php/"><span>PHP
SDK</span></a></li><li class="level-3"><a class="final"
href="/sdk/python/"><span>Python SDK</span></a></li><li class="level-3"><a
class="final" href="/sdk/ruby/"><span>Ruby SDK</span></a></li><li
class="level-3"><a class="final" href="/sdk/community/"><span>Community Powered
SDKs</span></a></li></ul></li></ul></li><li class="level-1"><a
class="expandible" href="#"><span>Deploying an Engine</span></a><ul><li
class="level-2"><a class="final" href="/deploy/"><span>Deploying as a Web
Service</span></a></li><li class="level-2"><a class="final" href="/
batchpredict/"><span>Batch Predictions</span></a></li><li class="level-2"><a
class="final" href="/deploy/monitoring/"><span>Monitoring
Engine</span></a></li><li class="level-2"><a class="final"
href="/deploy/engineparams/"><span>Setting Engine Parameters</span></a></li><li
class="level-2"><a class="final" href="/deploy/enginevariants/"><span>Deploying
Multiple Engine Variants</span></a></li><li class="level-2"><a class="final"
href="/deploy/plugin/"><span>Engine Server Plugin</span></a></li></ul></li><li
class="level-1"><a class="expandible" href="#"><span>Customizing an
Engine</span></a><ul><li class="level-2"><a class="final"
href="/customize/"><span>Learning DASE</span></a></li><li class="level-2"><a
class="final" href="/customize/dase/"><span>Implement DASE</span></a></li><li
class="level-2"><a class="final"
href="/customize/troubleshooting/"><span>Troubleshooting Engine
Development</span></a></li><li class="level-2"><a class="final"
href="/api/current/#package"><span>Engine Sca
la APIs</span></a></li></ul></li><li class="level-1"><a class="expandible"
href="#"><span>Collecting and Analyzing Data</span></a><ul><li
class="level-2"><a class="final" href="/datacollection/"><span>Event Server
Overview</span></a></li><li class="level-2"><a class="final"
href="/datacollection/eventapi/"><span>Collecting Data with
REST/SDKs</span></a></li><li class="level-2"><a class="final"
href="/datacollection/eventmodel/"><span>Events Modeling</span></a></li><li
class="level-2"><a class="final"
href="/datacollection/webhooks/"><span>Unifying Multichannel Data with
Webhooks</span></a></li><li class="level-2"><a class="final"
href="/datacollection/channel/"><span>Channel</span></a></li><li
class="level-2"><a class="final"
href="/datacollection/batchimport/"><span>Importing Data in
Batch</span></a></li><li class="level-2"><a class="final"
href="/datacollection/analytics/"><span>Using Analytics
Tools</span></a></li><li class="level-2"><a class="final"
href="/datacollection/plugin/
"><span>Event Server Plugin</span></a></li></ul></li><li class="level-1"><a
class="expandible" href="#"><span>Choosing an Algorithm</span></a><ul><li
class="level-2"><a class="final" href="/algorithm/"><span>Built-in Algorithm
Libraries</span></a></li><li class="level-2"><a class="final"
href="/algorithm/switch/"><span>Switching to Another
Algorithm</span></a></li><li class="level-2"><a class="final"
href="/algorithm/multiple/"><span>Combining Multiple
Algorithms</span></a></li><li class="level-2"><a class="final"
href="/algorithm/custom/"><span>Adding Your Own
Algorithms</span></a></li></ul></li><li class="level-1"><a class="expandible"
href="#"><span>Tuning and Evaluation</span></a><ul><li class="level-2"><a
class="final" href="/evaluation/"><span>Overview</span></a></li><li
class="level-2"><a class="final"
href="/evaluation/paramtuning/"><span>Hyperparameter Tuning</span></a></li><li
class="level-2"><a class="final"
href="/evaluation/evaluationdashboard/"><span>Evaluation Dashboa
rd</span></a></li><li class="level-2"><a class="final"
href="/evaluation/metricchoose/"><span>Choosing Evaluation
Metrics</span></a></li><li class="level-2"><a class="final"
href="/evaluation/metricbuild/"><span>Building Evaluation
Metrics</span></a></li></ul></li><li class="level-1"><a class="expandible"
href="#"><span>System Architecture</span></a><ul><li class="level-2"><a
class="final" href="/system/"><span>Architecture Overview</span></a></li><li
class="level-2"><a class="final" href="/system/anotherdatastore/"><span>Using
Another Data Store</span></a></li></ul></li><li class="level-1"><a
class="expandible" href="#"><span>PredictionIO® Official
Templates</span></a><ul><li class="level-2"><a class="final"
href="/templates/"><span>Intro</span></a></li><li class="level-2"><a
class="expandible" href="#"><span>Recommendation</span></a><ul><li
class="level-3"><a class="final"
href="/templates/recommendation/quickstart/"><span>Quick
Start</span></a></li><li class="level-3"><a class="
final" href="/templates/recommendation/dase/"><span>DASE</span></a></li><li
class="level-3"><a class="final"
href="/templates/recommendation/evaluation/"><span>Evaluation
Explained</span></a></li><li class="level-3"><a class="final"
href="/templates/recommendation/how-to/"><span>How-To</span></a></li><li
class="level-3"><a class="final"
href="/templates/recommendation/reading-custom-events/"><span>Read Custom
Events</span></a></li><li class="level-3"><a class="final"
href="/templates/recommendation/customize-data-prep/"><span>Customize Data
Preparator</span></a></li><li class="level-3"><a class="final"
href="/templates/recommendation/customize-serving/"><span>Customize
Serving</span></a></li><li class="level-3"><a class="final"
href="/templates/recommendation/training-with-implicit-preference/"><span>Train
with Implicit Preference</span></a></li><li class="level-3"><a class="final"
href="/templates/recommendation/blacklist-items/"><span>Filter Recommended
Items by Blacklist in Query
</span></a></li><li class="level-3"><a class="final"
href="/templates/recommendation/batch-evaluator/"><span>Batch Persistable
Evaluator</span></a></li></ul></li><li class="level-2"><a class="expandible"
href="#"><span>E-Commerce Recommendation</span></a><ul><li class="level-3"><a
class="final active"
href="/templates/ecommercerecommendation/quickstart/"><span>Quick
Start</span></a></li><li class="level-3"><a class="final"
href="/templates/ecommercerecommendation/dase/"><span>DASE</span></a></li><li
class="level-3"><a class="final"
href="/templates/ecommercerecommendation/how-to/"><span>How-To</span></a></li><li
class="level-3"><a class="final"
href="/templates/ecommercerecommendation/train-with-rate-event/"><span>Train
with Rate Event</span></a></li><li class="level-3"><a class="final"
href="/templates/ecommercerecommendation/adjust-score/"><span>Adjust
Score</span></a></li></ul></li><li class="level-2"><a class="expandible"
href="#"><span>Similar Product</span></a><ul><li class="l
evel-3"><a class="final"
href="/templates/similarproduct/quickstart/"><span>Quick
Start</span></a></li><li class="level-3"><a class="final"
href="/templates/similarproduct/dase/"><span>DASE</span></a></li><li
class="level-3"><a class="final"
href="/templates/similarproduct/how-to/"><span>How-To</span></a></li><li
class="level-3"><a class="final"
href="/templates/similarproduct/multi-events-multi-algos/"><span>Multiple
Events and Multiple Algorithms</span></a></li><li class="level-3"><a
class="final"
href="/templates/similarproduct/return-item-properties/"><span>Returns Item
Properties</span></a></li><li class="level-3"><a class="final"
href="/templates/similarproduct/train-with-rate-event/"><span>Train with Rate
Event</span></a></li><li class="level-3"><a class="final"
href="/templates/similarproduct/rid-user-set-event/"><span>Get Rid of Events
for Users</span></a></li><li class="level-3"><a class="final"
href="/templates/similarproduct/recommended-user/"><span>Recommend Users</span
></a></li></ul></li><li class="level-2"><a class="expandible"
>href="#"><span>Classification</span></a><ul><li class="level-3"><a
>class="final" href="/templates/classification/quickstart/"><span>Quick
>Start</span></a></li><li class="level-3"><a class="final"
>href="/templates/classification/dase/"><span>DASE</span></a></li><li
>class="level-3"><a class="final"
>href="/templates/classification/how-to/"><span>How-To</span></a></li><li
>class="level-3"><a class="final"
>href="/templates/classification/add-algorithm/"><span>Use Alternative
>Algorithm</span></a></li><li class="level-3"><a class="final"
>href="/templates/classification/reading-custom-properties/"><span>Read Custom
>Properties</span></a></li></ul></li></ul></li><li class="level-1"><a
>class="expandible" href="#"><span>Engine Template Gallery</span></a><ul><li
>class="level-2"><a class="final"
>href="/gallery/template-gallery/"><span>Browse</span></a></li><li
>class="level-2"><a class="final" href="/community/submit-template/"><span>Sub
mit your Engine as a Template</span></a></li></ul></li><li class="level-1"><a
class="expandible" href="#"><span>Demo Tutorials</span></a><ul><li
class="level-2"><a class="final" href="/demo/tapster/"><span>Comics
Recommendation Demo</span></a></li><li class="level-2"><a class="final"
href="/demo/community/"><span>Community Contributed Demo</span></a></li><li
class="level-2"><a class="final" href="/demo/textclassification/"><span>Text
Classification Engine Tutorial</span></a></li></ul></li><li class="level-1"><a
class="expandible" href="/community/"><span>Getting Involved</span></a><ul><li
class="level-2"><a class="final"
href="/community/contribute-code/"><span>Contribute Code</span></a></li><li
class="level-2"><a class="final"
href="/community/contribute-documentation/"><span>Contribute
Documentation</span></a></li><li class="level-2"><a class="final"
href="/community/contribute-sdk/"><span>Contribute a SDK</span></a></li><li
class="level-2"><a class="final" href="/community/contri
bute-webhook/"><span>Contribute a Webhook</span></a></li><li
class="level-2"><a class="final" href="/community/projects/"><span>Community
Projects</span></a></li></ul></li><li class="level-1"><a class="expandible"
href="#"><span>Getting Help</span></a><ul><li class="level-2"><a class="final"
href="/resources/faq/"><span>FAQs</span></a></li><li class="level-2"><a
class="final" href="/support/"><span>Support</span></a></li></ul></li><li
class="level-1"><a class="expandible"
href="#"><span>Resources</span></a><ul><li class="level-2"><a class="final"
href="/cli/"><span>Command-line Interface</span></a></li><li class="level-2"><a
class="final" href="/resources/release/"><span>Release
Cadence</span></a></li><li class="level-2"><a class="final"
href="/resources/intellij/"><span>Developing Engines with IntelliJ
IDEA</span></a></li><li class="level-2"><a class="final"
href="/resources/upgrade/"><span>Upgrade Instructions</span></a></li><li
class="level-2"><a class="final" href="/resources/gl
ossary/"><span>Glossary</span></a></li></ul></li><li class="level-1"><a
class="expandible" href="#"><span>Apache Software Foundation</span></a><ul><li
class="level-2"><a class="final" href="https://www.apache.org/"><span>Apache
Homepage</span></a></li><li class="level-2"><a class="final"
href="https://www.apache.org/licenses/"><span>License</span></a></li><li
class="level-2"><a class="final"
href="https://www.apache.org/foundation/sponsorship.html"><span>Sponsorship</span></a></li><li
class="level-2"><a class="final"
href="https://www.apache.org/foundation/thanks.html"><span>Thanks</span></a></li><li
class="level-2"><a class="final"
href="https://www.apache.org/security/"><span>Security</span></a></li></ul></li></ul></nav></div><div
class="col-md-9 col-sm-12"><div class="content-header hidden-md
hidden-lg"><div id="breadcrumbs" class="hidden-sm hidden xs"><ul><li><a
href="#">PredictionIO® Official Templates</a><span
class="spacer">></span></li><li><a href="#">E-Commerce Recommen
dation</a><span class="spacer">></span></li><li><span class="last">Quick
Start</span></li></ul></div><div id="page-title"><h1>Quick Start - E-Commerce
Recommendation Engine Template</h1></div></div><div
id="table-of-content-wrapper"><h5>On this page</h5><aside
id="table-of-contents"><ul> <li> <a href="#overview">Overview</a> </li> <li> <a
href="#usage">Usage</a> </li> <li> <a href="#1-install-and-run-predictionio">1.
Install and Run PredictionIO</a> </li> <li> <a
href="#2-create-a-new-engine-from-an-engine-template">2. Create a new Engine
from an Engine Template</a> </li> <li> <a
href="#3-generate-an-app-id-and-access-key">3. Generate an App ID and Access
Key</a> </li> <li> <a href="#4-collecting-data">4. Collecting Data</a> </li>
<li> <a href="#5-deploy-the-engine-as-a-service">5. Deploy the Engine as a
Service</a> </li> <li> <a href="#6-use-the-engine">6. Use the Engine</a> </li>
<li> <a href="#setting-constraint-unavailableitems">Setting constraint
"unavailableItems"</a> </li>
<li> <a href="#advanced-query">Advanced Query</a> </li> </ul> </aside><hr/><a
id="edit-page-link"
href="https://github.com/apache/predictionio/tree/livedoc/docs/manual/source/templates/ecommercerecommendation/quickstart.html.md.erb"><img
src="/images/icons/edit-pencil-d6c1bb3d.png"/>Edit this page</a></div><div
class="content-header hidden-sm hidden-xs"><div id="breadcrumbs"
class="hidden-sm hidden xs"><ul><li><a href="#">PredictionIO® Official
Templates</a><span class="spacer">></span></li><li><a href="#">E-Commerce
Recommendation</a><span class="spacer">></span></li><li><span
class="last">Quick Start</span></li></ul></div><div id="page-title"><h1>Quick
Start - E-Commerce Recommendation Engine Template</h1></div></div><div
class="content"> <h2 id='overview' class='header-anchors'>Overview</h2><p>This
engine template provides personalized recommendation for e-commerce
applications with the following features by default:</p> <ul> <li>Exclude
out-of-stock items</li> <li>Provid
e recommendation to new users who sign up after the model is trained</li>
<li>Recommend unseen items only (configurable)</li> <li>Recommend popular items
if no information about the user is available (added in template version
v0.4.0)</li> </ul> <div class="alert-message warning"><p>This template requires
PredictionIO version >= 0.9.0</p></div><h2 id='usage'
class='header-anchors'>Usage</h2><h3 id='event-data-requirements'
class='header-anchors'>Event Data Requirements</h3><p>By default, this template
takes the following data from Event Server:</p> <ul> <li>Users'
<em>view</em> events</li> <li>Users' <em>buy</em> events</li>
<li>Items' with <em>categories</em> properties</li> <li>Constraint
<em>unavailableItems</em> set events</li> </ul> <div class="alert-message
info"><p>This template can easily be customized to consider more user events
such as <em>rate</em> and <em>like</em>.</p></div><p>The <em>view</em> events
are used as Training Data to train the model. The alg
orithm has a parameter <em>unseenOnly</em>; when this parameter is set to
true, the engine would recommend unseen items only. You can specify a list of
events which are considered as <em>seen</em> events with the algorithm
parameter <em>seenEvents</em>. The default values are <em>view</em> and
<em>buy</em> events, which means that the engine by default recommends
un-viewed and un-bought items only. You can also define your own events which
are considered as <em>seen</em>.</p><p>The constraint <em>unavailableItems</em>
set events are used to exclude a list of unaviable items (such as out of stock)
for all users in real time.</p><h3 id='input-query'
class='header-anchors'>Input Query</h3> <ul> <li>UserID</li> <li>Num of items
to be recommended</li> <li>List of white-listed item categories (optional)</li>
<li>List of white-listed ItemIds (optional)</li> <li>List of black-listed
ItemIds (optional)</li> </ul> <p>The template also supports black-list and
whitelist. If a whitelist is provi
ded, the engine will include only those products in the recommendation.
Likewise, if a blacklist is provided, the engine will exclude those products in
the recommendation.</p><h3 id='output-predictedresult'
class='header-anchors'>Output PredictedResult</h3> <ul> <li>A ranked list of
recommended itemIDs</li> </ul> <h2 id='1.-install-and-run-predictionio'
class='header-anchors'>1. Install and Run PredictionIO</h2> <p>First you need
to <a href="/install">install PredictionIO 0.12.1</a> (if you haven't done
it).</p><p>Let's say you have installed PredictionIO at
<code>/home/yourname/PredictionIO/</code>. For convenience, add
PredictionIO's binary command path to your <code>PATH</code>, i.e.
<code>/home/yourname/PredictionIO/bin</code>:</p><div class="highlight
shell"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl"
style="text-align: right"><pre class="lineno">1</pre></td><td
class="code"><pre><span class="gp">$ </span><span class="nv">PATH</span><span
class
="o">=</span><span class="nv">$PATH</span>:/home/yourname/PredictionIO/bin;
<span class="nb">export </span>PATH
+<!DOCTYPE html><html><head><title>Quick Start - E-Commerce Recommendation
Engine Template</title><meta charset="utf-8"/><meta content="IE=edge,chrome=1"
http-equiv="X-UA-Compatible"/><meta name="viewport"
content="width=device-width, initial-scale=1.0"/><meta class="swiftype"
name="title" data-type="string" content="Quick Start - E-Commerce
Recommendation Engine Template"/><link rel="canonical"
href="https://predictionio.apache.org/templates/ecommercerecommendation/quickstart/"/><link
href="/images/favicon/normal-b330020a.png" rel="shortcut icon"/><link
href="/images/favicon/apple-c0febcf2.png" rel="apple-touch-icon"/><link
href="//fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800"
rel="stylesheet"/><link
href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css"
rel="stylesheet"/><link href="/stylesheets/application-eccfc6cb.css"
rel="stylesheet" type="text/css"/><script src="//cdnjs.cloudflare.com/ajax
/libs/html5shiv/3.7.2/html5shiv.min.js"></script><script
src="//cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script><script
src="//use.typekit.net/pqo0itb.js"></script><script>try{Typekit.load({ async:
true });}catch(e){}</script></head><body><div id="global"><header><div
class="container" id="header-wrapper"><div class="row"><div
class="col-sm-12"><div id="logo-wrapper"><span id="drawer-toggle"></span><a
href="#"></a><a href="http://predictionio.apache.org/"><img alt="Apache
PredictionIO" id="logo"
src="/images/logos/logo-ee2b9bb3.png"/></a><span>®</span></div><div
id="menu-wrapper"><div id="pill-wrapper"><a class="pill left"
href="/gallery/template-gallery">TEMPLATES</a> <a class="pill right"
href="//github.com/apache/predictionio/">OPEN SOURCE</a></div></div><img
class="mobile-search-bar-toggler hidden-md hidden-lg"
src="/images/icons/search-glass-704bd4ff.png"/></div></div></div></header><div
id="search-bar-row-wrapper"><div class="container-fluid"
id="search-bar-row"><div class="row"><div class="col-md-9 col-sm-11
col-xs-11"><div class="hidden-md hidden-lg"
id="mobile-page-heading-wrapper"><p>PredictionIO Docs</p><h4>Quick Start -
E-Commerce Recommendation Engine Template</h4></div><h4 class="hidden-sm
hidden-xs">PredictionIO Docs</h4></div><div class="col-md-3 col-sm-1 col-xs-1
hidden-md hidden-lg"><img id="left-menu-indicator"
src="/images/icons/down-arrow-dfe9f7fe.png"/></div><div class="col-md-3
col-sm-12 col-xs-12 swiftype-wrapper"><div class="swiftype"><form
class="search-form"><img class="search-box-toggler hidden-xs hidden-sm"
src="/images/icons/search-glass-704bd4ff.png"/><div class="search-box"><img
src="/images/icons/search-glass-704bd4ff.png"/><input type="text"
id="st-search-input" class="st-search-input" placeholder="Search
Doc..."/></div><img class="swiftype-row-hider hidden-md hidden-lg"
src="/images/icons/drawer-toggle-active-fcbef12a.png"/></form></div></div><div
class="mobile-left-menu-toggler hidden-md hid
den-lg"></div></div></div></div><div id="page" class="container-fluid"><div
class="row"><div id="left-menu-wrapper" class="col-md-3"><nav
id="nav-main"><ul><li class="level-1"><a class="expandible"
href="/"><span>Apache PredictionIO® Documentation</span></a><ul><li
class="level-2"><a class="final" href="/"><span>Welcome to Apache
PredictionIO®</span></a></li></ul></li><li class="level-1"><a
class="expandible" href="#"><span>Getting Started</span></a><ul><li
class="level-2"><a class="final" href="/start/"><span>A Quick
Intro</span></a></li><li class="level-2"><a class="final"
href="/install/"><span>Installing Apache PredictionIO</span></a></li><li
class="level-2"><a class="final" href="/start/download/"><span>Downloading an
Engine Template</span></a></li><li class="level-2"><a class="final"
href="/start/deploy/"><span>Deploying Your First Engine</span></a></li><li
class="level-2"><a class="final" href="/start/customize/"><span>Customizing the
Engine</span></a></li></ul></li><li cla
ss="level-1"><a class="expandible" href="#"><span>Integrating with Your
App</span></a><ul><li class="level-2"><a class="final"
href="/appintegration/"><span>App Integration Overview</span></a></li><li
class="level-2"><a class="expandible" href="/sdk/"><span>List of
SDKs</span></a><ul><li class="level-3"><a class="final"
href="/sdk/java/"><span>Java & Android SDK</span></a></li><li
class="level-3"><a class="final" href="/sdk/php/"><span>PHP
SDK</span></a></li><li class="level-3"><a class="final"
href="/sdk/python/"><span>Python SDK</span></a></li><li class="level-3"><a
class="final" href="/sdk/ruby/"><span>Ruby SDK</span></a></li><li
class="level-3"><a class="final" href="/sdk/community/"><span>Community Powered
SDKs</span></a></li></ul></li></ul></li><li class="level-1"><a
class="expandible" href="#"><span>Deploying an Engine</span></a><ul><li
class="level-2"><a class="final" href="/deploy/"><span>Deploying as a Web
Service</span></a></li><li class="level-2"><a class="final" href="/
batchpredict/"><span>Batch Predictions</span></a></li><li class="level-2"><a
class="final" href="/deploy/monitoring/"><span>Monitoring
Engine</span></a></li><li class="level-2"><a class="final"
href="/deploy/engineparams/"><span>Setting Engine Parameters</span></a></li><li
class="level-2"><a class="final" href="/deploy/enginevariants/"><span>Deploying
Multiple Engine Variants</span></a></li><li class="level-2"><a class="final"
href="/deploy/plugin/"><span>Engine Server Plugin</span></a></li></ul></li><li
class="level-1"><a class="expandible" href="#"><span>Customizing an
Engine</span></a><ul><li class="level-2"><a class="final"
href="/customize/"><span>Learning DASE</span></a></li><li class="level-2"><a
class="final" href="/customize/dase/"><span>Implement DASE</span></a></li><li
class="level-2"><a class="final"
href="/customize/troubleshooting/"><span>Troubleshooting Engine
Development</span></a></li><li class="level-2"><a class="final"
href="/api/current/#package"><span>Engine Sca
la APIs</span></a></li></ul></li><li class="level-1"><a class="expandible"
href="#"><span>Collecting and Analyzing Data</span></a><ul><li
class="level-2"><a class="final" href="/datacollection/"><span>Event Server
Overview</span></a></li><li class="level-2"><a class="final"
href="/datacollection/eventapi/"><span>Collecting Data with
REST/SDKs</span></a></li><li class="level-2"><a class="final"
href="/datacollection/eventmodel/"><span>Events Modeling</span></a></li><li
class="level-2"><a class="final"
href="/datacollection/webhooks/"><span>Unifying Multichannel Data with
Webhooks</span></a></li><li class="level-2"><a class="final"
href="/datacollection/channel/"><span>Channel</span></a></li><li
class="level-2"><a class="final"
href="/datacollection/batchimport/"><span>Importing Data in
Batch</span></a></li><li class="level-2"><a class="final"
href="/datacollection/analytics/"><span>Using Analytics
Tools</span></a></li><li class="level-2"><a class="final"
href="/datacollection/plugin/
"><span>Event Server Plugin</span></a></li></ul></li><li class="level-1"><a
class="expandible" href="#"><span>Choosing an Algorithm</span></a><ul><li
class="level-2"><a class="final" href="/algorithm/"><span>Built-in Algorithm
Libraries</span></a></li><li class="level-2"><a class="final"
href="/algorithm/switch/"><span>Switching to Another
Algorithm</span></a></li><li class="level-2"><a class="final"
href="/algorithm/multiple/"><span>Combining Multiple
Algorithms</span></a></li><li class="level-2"><a class="final"
href="/algorithm/custom/"><span>Adding Your Own
Algorithms</span></a></li></ul></li><li class="level-1"><a class="expandible"
href="#"><span>Tuning and Evaluation</span></a><ul><li class="level-2"><a
class="final" href="/evaluation/"><span>Overview</span></a></li><li
class="level-2"><a class="final"
href="/evaluation/paramtuning/"><span>Hyperparameter Tuning</span></a></li><li
class="level-2"><a class="final"
href="/evaluation/evaluationdashboard/"><span>Evaluation Dashboa
rd</span></a></li><li class="level-2"><a class="final"
href="/evaluation/metricchoose/"><span>Choosing Evaluation
Metrics</span></a></li><li class="level-2"><a class="final"
href="/evaluation/metricbuild/"><span>Building Evaluation
Metrics</span></a></li></ul></li><li class="level-1"><a class="expandible"
href="#"><span>System Architecture</span></a><ul><li class="level-2"><a
class="final" href="/system/"><span>Architecture Overview</span></a></li><li
class="level-2"><a class="final" href="/system/anotherdatastore/"><span>Using
Another Data Store</span></a></li></ul></li><li class="level-1"><a
class="expandible" href="#"><span>PredictionIO® Official
Templates</span></a><ul><li class="level-2"><a class="final"
href="/templates/"><span>Intro</span></a></li><li class="level-2"><a
class="expandible" href="#"><span>Recommendation</span></a><ul><li
class="level-3"><a class="final"
href="/templates/recommendation/quickstart/"><span>Quick
Start</span></a></li><li class="level-3"><a class="
final" href="/templates/recommendation/dase/"><span>DASE</span></a></li><li
class="level-3"><a class="final"
href="/templates/recommendation/evaluation/"><span>Evaluation
Explained</span></a></li><li class="level-3"><a class="final"
href="/templates/recommendation/how-to/"><span>How-To</span></a></li><li
class="level-3"><a class="final"
href="/templates/recommendation/reading-custom-events/"><span>Read Custom
Events</span></a></li><li class="level-3"><a class="final"
href="/templates/recommendation/customize-data-prep/"><span>Customize Data
Preparator</span></a></li><li class="level-3"><a class="final"
href="/templates/recommendation/customize-serving/"><span>Customize
Serving</span></a></li><li class="level-3"><a class="final"
href="/templates/recommendation/training-with-implicit-preference/"><span>Train
with Implicit Preference</span></a></li><li class="level-3"><a class="final"
href="/templates/recommendation/blacklist-items/"><span>Filter Recommended
Items by Blacklist in Query
</span></a></li><li class="level-3"><a class="final"
href="/templates/recommendation/batch-evaluator/"><span>Batch Persistable
Evaluator</span></a></li></ul></li><li class="level-2"><a class="expandible"
href="#"><span>E-Commerce Recommendation</span></a><ul><li class="level-3"><a
class="final active"
href="/templates/ecommercerecommendation/quickstart/"><span>Quick
Start</span></a></li><li class="level-3"><a class="final"
href="/templates/ecommercerecommendation/dase/"><span>DASE</span></a></li><li
class="level-3"><a class="final"
href="/templates/ecommercerecommendation/how-to/"><span>How-To</span></a></li><li
class="level-3"><a class="final"
href="/templates/ecommercerecommendation/train-with-rate-event/"><span>Train
with Rate Event</span></a></li><li class="level-3"><a class="final"
href="/templates/ecommercerecommendation/adjust-score/"><span>Adjust
Score</span></a></li></ul></li><li class="level-2"><a class="expandible"
href="#"><span>Similar Product</span></a><ul><li class="l
evel-3"><a class="final"
href="/templates/similarproduct/quickstart/"><span>Quick
Start</span></a></li><li class="level-3"><a class="final"
href="/templates/similarproduct/dase/"><span>DASE</span></a></li><li
class="level-3"><a class="final"
href="/templates/similarproduct/how-to/"><span>How-To</span></a></li><li
class="level-3"><a class="final"
href="/templates/similarproduct/multi-events-multi-algos/"><span>Multiple
Events and Multiple Algorithms</span></a></li><li class="level-3"><a
class="final"
href="/templates/similarproduct/return-item-properties/"><span>Returns Item
Properties</span></a></li><li class="level-3"><a class="final"
href="/templates/similarproduct/train-with-rate-event/"><span>Train with Rate
Event</span></a></li><li class="level-3"><a class="final"
href="/templates/similarproduct/rid-user-set-event/"><span>Get Rid of Events
for Users</span></a></li><li class="level-3"><a class="final"
href="/templates/similarproduct/recommended-user/"><span>Recommend Users</span
></a></li></ul></li><li class="level-2"><a class="expandible"
>href="#"><span>Classification</span></a><ul><li class="level-3"><a
>class="final" href="/templates/classification/quickstart/"><span>Quick
>Start</span></a></li><li class="level-3"><a class="final"
>href="/templates/classification/dase/"><span>DASE</span></a></li><li
>class="level-3"><a class="final"
>href="/templates/classification/how-to/"><span>How-To</span></a></li><li
>class="level-3"><a class="final"
>href="/templates/classification/add-algorithm/"><span>Use Alternative
>Algorithm</span></a></li><li class="level-3"><a class="final"
>href="/templates/classification/reading-custom-properties/"><span>Read Custom
>Properties</span></a></li></ul></li></ul></li><li class="level-1"><a
>class="expandible" href="#"><span>Engine Template Gallery</span></a><ul><li
>class="level-2"><a class="final"
>href="/gallery/template-gallery/"><span>Browse</span></a></li><li
>class="level-2"><a class="final" href="/community/submit-template/"><span>Sub
mit your Engine as a Template</span></a></li></ul></li><li class="level-1"><a
class="expandible" href="#"><span>Demo Tutorials</span></a><ul><li
class="level-2"><a class="final" href="/demo/tapster/"><span>Comics
Recommendation Demo</span></a></li><li class="level-2"><a class="final"
href="/demo/community/"><span>Community Contributed Demo</span></a></li><li
class="level-2"><a class="final" href="/demo/textclassification/"><span>Text
Classification Engine Tutorial</span></a></li></ul></li><li class="level-1"><a
class="expandible" href="/community/"><span>Getting Involved</span></a><ul><li
class="level-2"><a class="final"
href="/community/contribute-code/"><span>Contribute Code</span></a></li><li
class="level-2"><a class="final"
href="/community/contribute-documentation/"><span>Contribute
Documentation</span></a></li><li class="level-2"><a class="final"
href="/community/contribute-sdk/"><span>Contribute a SDK</span></a></li><li
class="level-2"><a class="final" href="/community/contri
bute-webhook/"><span>Contribute a Webhook</span></a></li><li
class="level-2"><a class="final" href="/community/projects/"><span>Community
Projects</span></a></li></ul></li><li class="level-1"><a class="expandible"
href="#"><span>Getting Help</span></a><ul><li class="level-2"><a class="final"
href="/resources/faq/"><span>FAQs</span></a></li><li class="level-2"><a
class="final" href="/support/"><span>Support</span></a></li></ul></li><li
class="level-1"><a class="expandible"
href="#"><span>Resources</span></a><ul><li class="level-2"><a class="final"
href="/cli/"><span>Command-line Interface</span></a></li><li class="level-2"><a
class="final" href="/resources/release/"><span>Release
Cadence</span></a></li><li class="level-2"><a class="final"
href="/resources/intellij/"><span>Developing Engines with IntelliJ
IDEA</span></a></li><li class="level-2"><a class="final"
href="/resources/upgrade/"><span>Upgrade Instructions</span></a></li><li
class="level-2"><a class="final" href="/resources/gl
ossary/"><span>Glossary</span></a></li></ul></li><li class="level-1"><a
class="expandible" href="#"><span>Apache Software Foundation</span></a><ul><li
class="level-2"><a class="final" href="https://www.apache.org/"><span>Apache
Homepage</span></a></li><li class="level-2"><a class="final"
href="https://www.apache.org/licenses/"><span>License</span></a></li><li
class="level-2"><a class="final"
href="https://www.apache.org/foundation/sponsorship.html"><span>Sponsorship</span></a></li><li
class="level-2"><a class="final"
href="https://www.apache.org/foundation/thanks.html"><span>Thanks</span></a></li><li
class="level-2"><a class="final"
href="https://www.apache.org/security/"><span>Security</span></a></li></ul></li></ul></nav></div><div
class="col-md-9 col-sm-12"><div class="content-header hidden-md
hidden-lg"><div id="breadcrumbs" class="hidden-sm hidden xs"><ul><li><a
href="#">PredictionIO® Official Templates</a><span
class="spacer">></span></li><li><a href="#">E-Commerce Recommen
dation</a><span class="spacer">></span></li><li><span class="last">Quick
Start</span></li></ul></div><div id="page-title"><h1>Quick Start - E-Commerce
Recommendation Engine Template</h1></div></div><div
id="table-of-content-wrapper"><h5>On this page</h5><aside
id="table-of-contents"><ul> <li> <a href="#overview">Overview</a> </li> <li> <a
href="#usage">Usage</a> </li> <li> <a href="#1-install-and-run-predictionio">1.
Install and Run PredictionIO</a> </li> <li> <a
href="#2-create-a-new-engine-from-an-engine-template">2. Create a new Engine
from an Engine Template</a> </li> <li> <a
href="#3-generate-an-app-id-and-access-key">3. Generate an App ID and Access
Key</a> </li> <li> <a href="#4-collecting-data">4. Collecting Data</a> </li>
<li> <a href="#5-deploy-the-engine-as-a-service">5. Deploy the Engine as a
Service</a> </li> <li> <a href="#6-use-the-engine">6. Use the Engine</a> </li>
<li> <a href="#setting-constraint-unavailableitems">Setting constraint
"unavailableItems"</a> </li>
<li> <a href="#advanced-query">Advanced Query</a> </li> </ul> </aside><hr/><a
id="edit-page-link"
href="https://github.com/apache/predictionio/tree/livedoc/docs/manual/source/templates/ecommercerecommendation/quickstart.html.md.erb"><img
src="/images/icons/edit-pencil-d6c1bb3d.png"/>Edit this page</a></div><div
class="content-header hidden-sm hidden-xs"><div id="breadcrumbs"
class="hidden-sm hidden xs"><ul><li><a href="#">PredictionIO® Official
Templates</a><span class="spacer">></span></li><li><a href="#">E-Commerce
Recommendation</a><span class="spacer">></span></li><li><span
class="last">Quick Start</span></li></ul></div><div id="page-title"><h1>Quick
Start - E-Commerce Recommendation Engine Template</h1></div></div><div
class="content"> <h2 id='overview' class='header-anchors'>Overview</h2><p>This
engine template provides personalized recommendation for e-commerce
applications with the following features by default:</p> <ul> <li>Exclude
out-of-stock items</li> <li>Provid
e recommendation to new users who sign up after the model is trained</li>
<li>Recommend unseen items only (configurable)</li> <li>Recommend popular items
if no information about the user is available (added in template version
v0.4.0)</li> </ul> <div class="alert-message warning"><p>This template requires
PredictionIO version >= 0.9.0</p></div><h2 id='usage'
class='header-anchors'>Usage</h2><h3 id='event-data-requirements'
class='header-anchors'>Event Data Requirements</h3><p>By default, this template
takes the following data from Event Server:</p> <ul> <li>Users'
<em>view</em> events</li> <li>Users' <em>buy</em> events</li>
<li>Items' with <em>categories</em> properties</li> <li>Constraint
<em>unavailableItems</em> set events</li> </ul> <div class="alert-message
info"><p>This template can easily be customized to consider more user events
such as <em>rate</em> and <em>like</em>.</p></div><p>The <em>view</em> events
are used as Training Data to train the model. The alg
orithm has a parameter <em>unseenOnly</em>; when this parameter is set to
true, the engine would recommend unseen items only. You can specify a list of
events which are considered as <em>seen</em> events with the algorithm
parameter <em>seenEvents</em>. The default values are <em>view</em> and
<em>buy</em> events, which means that the engine by default recommends
un-viewed and un-bought items only. You can also define your own events which
are considered as <em>seen</em>.</p><p>The constraint <em>unavailableItems</em>
set events are used to exclude a list of unaviable items (such as out of stock)
for all users in real time.</p><h3 id='input-query'
class='header-anchors'>Input Query</h3> <ul> <li>UserID</li> <li>Num of items
to be recommended</li> <li>List of white-listed item categories (optional)</li>
<li>List of white-listed ItemIds (optional)</li> <li>List of black-listed
ItemIds (optional)</li> </ul> <p>The template also supports black-list and
whitelist. If a whitelist is provi
ded, the engine will include only those products in the recommendation.
Likewise, if a blacklist is provided, the engine will exclude those products in
the recommendation.</p><h3 id='output-predictedresult'
class='header-anchors'>Output PredictedResult</h3> <ul> <li>A ranked list of
recommended itemIDs</li> </ul> <h2 id='1.-install-and-run-predictionio'
class='header-anchors'>1. Install and Run PredictionIO</h2> <p>First you need
to <a href="/install">install PredictionIO 0.13.0</a> (if you haven't done
it).</p><p>Let's say you have installed PredictionIO at
<code>/home/yourname/PredictionIO/</code>. For convenience, add
PredictionIO's binary command path to your <code>PATH</code>, i.e.
<code>/home/yourname/PredictionIO/bin</code>:</p><div class="highlight
shell"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl"
style="text-align: right"><pre class="lineno">1</pre></td><td
class="code"><pre><span class="gp">$ </span><span class="nv">PATH</span><span
class
="o">=</span><span class="nv">$PATH</span>:/home/yourname/PredictionIO/bin;
<span class="nb">export </span>PATH
</pre></td></tr></tbody></table> </div> <div class="alert-message note"><p>If
you launched <strong>PredictionIO AWS instance</strong>, the path is located at
<code>/opt/PredictionIO/bin</code>.</p></div><p>Once you have completed the
installation process, please make sure all the components (PredictionIO Event
Server, Elasticsearch, and HBase) are up and running.</p><div
class="alert-message note"><p>If you launched <strong>PredictionIO AWS
instance</strong>, you can skip <code>pio-start-all</code>. All components
should have been started automatically.</p></div><p>If you are using PostgreSQL
or MySQL, run the following to start PredictionIO Event Server:</p><div
class="highlight shell"><table style="border-spacing: 0"><tbody><tr><td
class="gutter gl" style="text-align: right"><pre class="lineno">1</pre></td><td
class="code"><pre><span class="gp">$ </span>pio eventserver &
</pre></td></tr></tbody></table> </div> <p>If instead you are running HBase
and Elasticsearch, run the following to start all PredictionIO Event Server,
HBase, and Elasticsearch:</p><div class="highlight shell"><table
style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align:
right"><pre class="lineno">1</pre></td><td class="code"><pre><span class="gp">$
</span>pio-start-all
</pre></td></tr></tbody></table> </div> <p>You can check the status by
running:</p><div class="highlight shell"><table style="border-spacing:
0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre
class="lineno">1</pre></td><td class="code"><pre><span class="gp">$ </span>pio
status
@@ -32,7 +32,7 @@ Your system is all ready to go.
<span class="o">[</span>INFO] <span class="o">[</span>App<span
class="nv">$]</span> MyApp1 | 1 |
3mZWDzci2D5YsqAnqNnXH9SB6Rg3dsTBs8iHkK6X2i54IQsIZI1eEeQQyMfs7b3F | <span
class="o">(</span>all<span class="o">)</span>
<span class="o">[</span>INFO] <span class="o">[</span>App<span
class="nv">$]</span> MyApp2 | 2 |
io5lz6Eg4m3Xe4JZTBFE13GMAf1dhFl6ZteuJfrO84XpdOz9wRCrDU44EUaYuXq5 | <span
class="o">(</span>all<span class="o">)</span>
<span class="o">[</span>INFO] <span class="o">[</span>App<span
class="nv">$]</span> Finished listing 2 app<span class="o">(</span>s<span
class="o">)</span>.
-</pre></td></tr></tbody></table> </div> <p><a href="#"></a></p> <h2
id='4.-collecting-data' class='header-anchors'>4. Collecting Data</h2><p>Next,
let's collect training data for this Engine. By default, the E-Commerce
Recommendation Engine Template supports 2 types of entities and 2 events:
<strong>user</strong> and <strong>item</strong>; events <strong>view</strong>
and <strong>buy</strong>. An item has the <strong>categories</strong> property,
which is a list of category names (String). A user can view and buy an item.
The specical <strong>constraint</strong> entiy with entityId
<strong>unavailableItems</strong> defines a list of unavailable items and is
taken into account in realtime during serving.</p><p>In summary, this template
requires '$set' user event, '$set' item event, user-view-item
events, user-buy-item event and '$set' constraint event.</p><div
class="alert-message info"><p>This template can easily be customized to
consider other user-to-it
em events.</p></div> <p>You can send these events to PredictionIO Event Server
in real-time easily by making a HTTP request or through the provided SDK.
Please see <a href="/appintegration/">App Integration Overview</a> for more
details how to integrate your app with SDK.</p><p>Let's try sending events
to EventServer with the following <code>curl</code> commands (The corresponding
SDK code is showed in other tabs).</p><p>Replace
<code><ACCCESS_KEY></code> by the Access Key generated in above steps.
Note that <code>localhost:7070</code> is the default URL of the Event
Server.</p><p>For convenience, set your access key to the shell variable,
run:</p><p><code>$ ACCESS_KEY=<ACCESS_KEY></code></p> <p><a
href="#"></a></p> <p>For example, when a new user with id "u0" is
created in your app on time <code>2014-11-02T09:39:45.618-08:00</code> (current
time will be used if eventTime is not specified), you can send a
<code>$set</code> event for this user. To send this
event, run the following <code>curl</code> command:</p><div class="tabs"> <ul
class="control"> <li data-lang="json"><a
href="#tab-de8dbc66-d1fd-4808-9213-ba79ee5f547c">REST API</a></li> <li
data-lang="python"><a href="#tab-aa435173-0588-4797-8d49-e3ec1e865138">Python
SDK</a></li> <li data-lang="php"><a
href="#tab-2c1f099b-1f01-4c99-98cb-c6b40d11c989">PHP SDK</a></li> <li
data-lang="ruby"><a href="#tab-2fc12903-449d-45fa-a83d-91ac10212427">Ruby
SDK</a></li> <li data-lang="java"><a
href="#tab-06bd861b-8fc1-4835-a178-0060e2afce5c">Java SDK</a></li> </ul> <div
data-tab="REST API" data-lang="json"
id="tab-de8dbc66-d1fd-4808-9213-ba79ee5f547c"> <div class="highlight shell">
<table style="border-spacing: 0"><tbody><tr> <td class="gutter gl"
style="text-align: right"><pre class="lineno">1
+</pre></td></tr></tbody></table> </div> <p><a href="#"></a></p> <h2
id='4.-collecting-data' class='header-anchors'>4. Collecting Data</h2><p>Next,
let's collect training data for this Engine. By default, the E-Commerce
Recommendation Engine Template supports 2 types of entities and 2 events:
<strong>user</strong> and <strong>item</strong>; events <strong>view</strong>
and <strong>buy</strong>. An item has the <strong>categories</strong> property,
which is a list of category names (String). A user can view and buy an item.
The specical <strong>constraint</strong> entiy with entityId
<strong>unavailableItems</strong> defines a list of unavailable items and is
taken into account in realtime during serving.</p><p>In summary, this template
requires '$set' user event, '$set' item event, user-view-item
events, user-buy-item event and '$set' constraint event.</p><div
class="alert-message info"><p>This template can easily be customized to
consider other user-to-it
em events.</p></div> <p>You can send these events to PredictionIO Event Server
in real-time easily by making a HTTP request or through the provided SDK.
Please see <a href="/appintegration/">App Integration Overview</a> for more
details how to integrate your app with SDK.</p><p>Let's try sending events
to EventServer with the following <code>curl</code> commands (The corresponding
SDK code is showed in other tabs).</p><p>Replace
<code><ACCCESS_KEY></code> by the Access Key generated in above steps.
Note that <code>localhost:7070</code> is the default URL of the Event
Server.</p><p>For convenience, set your access key to the shell variable,
run:</p><p><code>$ ACCESS_KEY=<ACCESS_KEY></code></p> <p><a
href="#"></a></p> <p>For example, when a new user with id "u0" is
created in your app on time <code>2014-11-02T09:39:45.618-08:00</code> (current
time will be used if eventTime is not specified), you can send a
<code>$set</code> event for this user. To send this
event, run the following <code>curl</code> command:</p><div class="tabs"> <ul
class="control"> <li data-lang="json"><a
href="#tab-b5faf9aa-77b7-4dec-925e-a6c907841548">REST API</a></li> <li
data-lang="python"><a href="#tab-1263f6ef-574c-4676-90c7-9dea40ab2c62">Python
SDK</a></li> <li data-lang="php"><a
href="#tab-9b54c479-791d-40de-83b3-621b1fabdd1d">PHP SDK</a></li> <li
data-lang="ruby"><a href="#tab-406e9e73-253e-4341-b904-cac5cedd41c6">Ruby
SDK</a></li> <li data-lang="java"><a
href="#tab-9fdb48a3-e8cb-425f-b38e-51f7260f5cdf">Java SDK</a></li> </ul> <div
data-tab="REST API" data-lang="json"
id="tab-b5faf9aa-77b7-4dec-925e-a6c907841548"> <div class="highlight shell">
<table style="border-spacing: 0"><tbody><tr> <td class="gutter gl"
style="text-align: right"><pre class="lineno">1
2
3
4
@@ -47,7 +47,7 @@ Your system is all ready to go.
"entityId" : "u0",
"eventTime" : "2014-11-02T09:39:45.618-08:00"
}'</span>
-</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Python SDK"
data-lang="python" id="tab-aa435173-0588-4797-8d49-e3ec1e865138"> <div
class="highlight python"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
+</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Python SDK"
data-lang="python" id="tab-1263f6ef-574c-4676-90c7-9dea40ab2c62"> <div
class="highlight python"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4
@@ -78,7 +78,7 @@ Your system is all ready to go.
<span class="n">entity_type</span><span class="o">=</span><span
class="s">"user"</span><span class="p">,</span>
<span class="n">entity_id</span><span class="o">=<</span><span
class="n">USER_ID</span><span class="o">></span>
<span class="p">)</span>
-</pre></td> </tr></tbody></table> </div> </div> <div data-tab="PHP SDK"
data-lang="php" id="tab-2c1f099b-1f01-4c99-98cb-c6b40d11c989"> <div
class="highlight php"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
+</pre></td> </tr></tbody></table> </div> </div> <div data-tab="PHP SDK"
data-lang="php" id="tab-9b54c479-791d-40de-83b3-621b1fabdd1d"> <div
class="highlight php"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4
@@ -119,7 +119,7 @@ Your system is all ready to go.
<span class="s1">'properties'</span> <span class="o">=></span> <span
class="k">array</span><span class="p">(</span><span
class="s1">'categories'</span> <span class="o">=></span> <span
class="k">array</span><span class="p">(</span><span
class="s1">'<CATEGORY_1>'</span><span class="p">,</span> <span
class="s1">'<CATEGORY_2>'</span><span class="p">))</span>
<span class="p">));</span>
<span class="cp">?></span>
-</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Ruby SDK"
data-lang="ruby" id="tab-2fc12903-449d-45fa-a83d-91ac10212427"> <div
class="highlight ruby"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
+</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Ruby SDK"
data-lang="ruby" id="tab-406e9e73-253e-4341-b904-cac5cedd41c6"> <div
class="highlight ruby"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4
@@ -136,7 +136,7 @@ Your system is all ready to go.
<span class="s1">'user'</span><span class="p">,</span>
<span class="o"><</span><span class="no">USER</span> <span
class="no">ID</span><span class="o">></span>
<span class="p">)</span>
-</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Java SDK"
data-lang="java" id="tab-06bd861b-8fc1-4835-a178-0060e2afce5c"> <div
class="highlight java"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
+</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Java SDK"
data-lang="java" id="tab-9fdb48a3-e8cb-425f-b38e-51f7260f5cdf"> <div
class="highlight java"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4
@@ -161,7 +161,7 @@ Your system is all ready to go.
<span class="o">.</span><span class="na">entityType</span><span
class="o">(</span><span class="s">"user"</span><span class="o">)</span>
<span class="o">.</span><span class="na">entityId</span><span
class="o">(<</span><span class="n">USER_ID</span><span
class="o">>);</span>
<span class="n">client</span><span class="o">.</span><span
class="na">createEvent</span><span class="o">(</span><span
class="n">userEvent</span><span class="o">);</span>
-</pre></td> </tr></tbody></table> </div> </div> </div> <p>When a new item
"i0" is created in your app on time
<code>2014-11-02T09:39:45.618-08:00</code> (current time will be used if
eventTime is not specified), you can send a <code>$set</code> event for the
item. Note that the item is set with categories properties:
<code>"c1"</code> and <code>"c2"</code>. Run the following
<code>curl</code> command:</p><div class="tabs"> <ul class="control"> <li
data-lang="json"><a href="#tab-5e85670f-49f7-47ec-87a9-9a949833f42e">REST
API</a></li> <li data-lang="python"><a
href="#tab-47d72cf7-3f65-4bd9-b7fc-a0d8ee4f83fe">Python SDK</a></li> <li
data-lang="php"><a href="#tab-02f3ee89-a226-400c-8dc3-b3d3111e27ff">PHP
SDK</a></li> <li data-lang="ruby"><a
href="#tab-c26a2d52-957e-428f-8926-f9a9640e3838">Ruby SDK</a></li> <li
data-lang="java"><a href="#tab-d42f7770-d4a4-49a4-822b-0d76d166b988">Java
SDK</a></li> </ul> <div data-tab="REST API" data-lang="json" id="tab-5e8567
0f-49f7-47ec-87a9-9a949833f42e"> <div class="highlight shell"> <table
style="border-spacing: 0"><tbody><tr> <td class="gutter gl" style="text-align:
right"><pre class="lineno">1
+</pre></td> </tr></tbody></table> </div> </div> </div> <p>When a new item
"i0" is created in your app on time
<code>2014-11-02T09:39:45.618-08:00</code> (current time will be used if
eventTime is not specified), you can send a <code>$set</code> event for the
item. Note that the item is set with categories properties:
<code>"c1"</code> and <code>"c2"</code>. Run the following
<code>curl</code> command:</p><div class="tabs"> <ul class="control"> <li
data-lang="json"><a href="#tab-c463a640-d436-40f5-b9ec-a5d1eb149b2e">REST
API</a></li> <li data-lang="python"><a
href="#tab-b6822bcc-9690-4a21-9baa-3acd27bca817">Python SDK</a></li> <li
data-lang="php"><a href="#tab-787b0830-c9a2-4730-9006-36f4377a0522">PHP
SDK</a></li> <li data-lang="ruby"><a
href="#tab-3c8e5718-5d8e-4417-ad46-5d2bc6d5179e">Ruby SDK</a></li> <li
data-lang="java"><a href="#tab-968466b4-be1d-44c9-9fbc-120e3bce9a05">Java
SDK</a></li> </ul> <div data-tab="REST API" data-lang="json" id="tab-c463a6
40-d436-40f5-b9ec-a5d1eb149b2e"> <div class="highlight shell"> <table
style="border-spacing: 0"><tbody><tr> <td class="gutter gl" style="text-align:
right"><pre class="lineno">1
2
3
4
@@ -182,7 +182,7 @@ Your system is all ready to go.
}
"eventTime" : "2014-11-02T09:39:45.618-08:00"
}'</span>
-</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Python SDK"
data-lang="python" id="tab-47d72cf7-3f65-4bd9-b7fc-a0d8ee4f83fe"> <div
class="highlight python"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
+</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Python SDK"
data-lang="python" id="tab-b6822bcc-9690-4a21-9baa-3acd27bca817"> <div
class="highlight python"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4
@@ -201,7 +201,7 @@ Your system is all ready to go.
<span class="s">"categories"</span> <span class="p">:</span> <span
class="p">[</span><span class="s">"<CATEGORY_1>"</span><span
class="p">,</span> <span class="s">"<CATEGORY_2>"</span><span
class="p">]</span>
<span class="p">}</span>
<span class="p">)</span>
-</pre></td> </tr></tbody></table> </div> </div> <div data-tab="PHP SDK"
data-lang="php" id="tab-02f3ee89-a226-400c-8dc3-b3d3111e27ff"> <div
class="highlight php"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
+</pre></td> </tr></tbody></table> </div> </div> <div data-tab="PHP SDK"
data-lang="php" id="tab-787b0830-c9a2-4730-9006-36f4377a0522"> <div
class="highlight php"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4
@@ -218,7 +218,7 @@ Your system is all ready to go.
<span class="s1">'properties'</span> <span class="o">=></span> <span
class="k">array</span><span class="p">(</span><span
class="s1">'categories'</span> <span class="o">=></span> <span
class="k">array</span><span class="p">(</span><span
class="s1">'<CATEGORY_1>'</span><span class="p">,</span> <span
class="s1">'<CATEGORY_2>'</span><span class="p">))</span>
<span class="p">));</span>
<span class="cp">?></span>
-</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Ruby SDK"
data-lang="ruby" id="tab-c26a2d52-957e-428f-8926-f9a9640e3838"> <div
class="highlight ruby"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
+</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Ruby SDK"
data-lang="ruby" id="tab-3c8e5718-5d8e-4417-ad46-5d2bc6d5179e"> <div
class="highlight ruby"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4
@@ -235,7 +235,7 @@ Your system is all ready to go.
<span class="p">}</span>
<span class="p">)</span>
-</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Java SDK"
data-lang="java" id="tab-d42f7770-d4a4-49a4-822b-0d76d166b988"> <div
class="highlight java"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
+</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Java SDK"
data-lang="java" id="tab-968466b4-be1d-44c9-9fbc-120e3bce9a05"> <div
class="highlight java"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4
@@ -248,7 +248,7 @@ Your system is all ready to go.
<span class="o">.</span><span class="na">entityId</span><span
class="o">(<</span><span class="n">ITEM_ID</span><span class="o">>)</span>
<span class="o">.</span><span class="na">property</span><span
class="o">(</span><span class="s">"categories"</span><span class="o">,</span>
<span class="n">ImmutableList</span><span class="o">.</span><span
class="na">of</span><span class="o">(</span><span
class="s">"<CATEGORY_1>"</span><span class="o">,</span> <span
class="s">"<CATEGORY_2>"</span><span class="o">));</span>
<span class="n">client</span><span class="o">.</span><span
class="na">createEvent</span><span class="o">(</span><span
class="n">itemEvent</span><span class="o">)</span>
-</pre></td> </tr></tbody></table> </div> </div> </div> <p>The properties of
the <code>user</code> and <code>item</code> can be set, unset, or delete by
special events <strong>$set</strong>, <strong>$unset</strong> and
<strong>$delete</strong>. Please refer to <a
href="/datacollection/eventapi/#note-about-properties">Event API</a> for more
details of using these events.</p><p>When the user "u0" view item
"i0" on time <code>2014-11-10T12:34:56.123-08:00</code> (current time
will be used if eventTime is not specified), you can send a view event. Run the
following <code>curl</code> command:</p><div class="tabs"> <ul class="control">
<li data-lang="json"><a href="#tab-e36ec442-5bc5-436e-b04d-1ac457112333">REST
API</a></li> <li data-lang="python"><a
href="#tab-5891c4b6-3462-4a9b-a16e-af0404157447">Python SDK</a></li> <li
data-lang="php"><a href="#tab-f7f44462-c4a3-44e3-8f06-d1a563ab4226">PHP
SDK</a></li> <li data-lang="ruby"><a href="#tab-350d8dc2-fca3-4e46-903d-b22e06
dfd7e1">Ruby SDK</a></li> <li data-lang="java"><a
href="#tab-c11ed8e7-8a1a-48e9-8fe8-bba08f11ccce">Java SDK</a></li> </ul> <div
data-tab="REST API" data-lang="json"
id="tab-e36ec442-5bc5-436e-b04d-1ac457112333"> <div class="highlight shell">
<table style="border-spacing: 0"><tbody><tr> <td class="gutter gl"
style="text-align: right"><pre class="lineno">1
+</pre></td> </tr></tbody></table> </div> </div> </div> <p>The properties of
the <code>user</code> and <code>item</code> can be set, unset, or delete by
special events <strong>$set</strong>, <strong>$unset</strong> and
<strong>$delete</strong>. Please refer to <a
href="/datacollection/eventapi/#note-about-properties">Event API</a> for more
details of using these events.</p><p>When the user "u0" view item
"i0" on time <code>2014-11-10T12:34:56.123-08:00</code> (current time
will be used if eventTime is not specified), you can send a view event. Run the
following <code>curl</code> command:</p><div class="tabs"> <ul class="control">
<li data-lang="json"><a href="#tab-14993008-f4f9-4a5e-999c-28207c80079f">REST
API</a></li> <li data-lang="python"><a
href="#tab-3cbc5e6c-21d3-4dfb-b8c9-25d73a395f43">Python SDK</a></li> <li
data-lang="php"><a href="#tab-65aa902e-33a3-4da3-b61c-38acf6ea9194">PHP
SDK</a></li> <li data-lang="ruby"><a href="#tab-ef6e7811-f7f2-475a-a80f-8a76b1
892b18">Ruby SDK</a></li> <li data-lang="java"><a
href="#tab-f0cb2abc-a8b9-4cfd-bb90-5c899e2d0a11">Java SDK</a></li> </ul> <div
data-tab="REST API" data-lang="json"
id="tab-14993008-f4f9-4a5e-999c-28207c80079f"> <div class="highlight shell">
<table style="border-spacing: 0"><tbody><tr> <td class="gutter gl"
style="text-align: right"><pre class="lineno">1
2
3
4
@@ -267,7 +267,7 @@ Your system is all ready to go.
"targetEntityId" : "i0",
"eventTime" : "2014-11-10T12:34:56.123-08:00"
}'</span>
-</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Python SDK"
data-lang="python" id="tab-5891c4b6-3462-4a9b-a16e-af0404157447"> <div
class="highlight python"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
+</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Python SDK"
data-lang="python" id="tab-3cbc5e6c-21d3-4dfb-b8c9-25d73a395f43"> <div
class="highlight python"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4
@@ -284,7 +284,7 @@ Your system is all ready to go.
<span class="n">target_entity_type</span><span class="o">=</span><span
class="s">"item"</span><span class="p">,</span>
<span class="n">target_entity_id</span><span class="o">=<</span><span
class="n">ITEM</span> <span class="n">ID</span><span class="o">></span>
<span class="p">)</span>
-</pre></td> </tr></tbody></table> </div> </div> <div data-tab="PHP SDK"
data-lang="php" id="tab-f7f44462-c4a3-44e3-8f06-d1a563ab4226"> <div
class="highlight php"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
+</pre></td> </tr></tbody></table> </div> </div> <div data-tab="PHP SDK"
data-lang="php" id="tab-65aa902e-33a3-4da3-b61c-38acf6ea9194"> <div
class="highlight php"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4
@@ -303,7 +303,7 @@ Your system is all ready to go.
<span class="s1">'targetEntityId'</span> <span class="o">=></span> <span
class="o"><</span><span class="nx">ITEM</span> <span
class="nx">ID</span><span class="o">></span>
<span class="p">));</span>
<span class="cp">?></span>
-</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Ruby SDK"
data-lang="ruby" id="tab-350d8dc2-fca3-4e46-903d-b22e06dfd7e1"> <div
class="highlight ruby"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
+</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Ruby SDK"
data-lang="ruby" id="tab-ef6e7811-f7f2-475a-a80f-8a76b1892b18"> <div
class="highlight ruby"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4
@@ -322,7 +322,7 @@ Your system is all ready to go.
<span class="p">}</span>
<span class="p">)</span>
-</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Java SDK"
data-lang="java" id="tab-c11ed8e7-8a1a-48e9-8fe8-bba08f11ccce"> <div
class="highlight java"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
+</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Java SDK"
data-lang="java" id="tab-f0cb2abc-a8b9-4cfd-bb90-5c899e2d0a11"> <div
class="highlight java"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4
@@ -337,7 +337,7 @@ Your system is all ready to go.
<span class="o">.</span><span class="na">targetEntityType</span><span
class="o">(</span><span class="s">"item"</span><span class="o">)</span>
<span class="o">.</span><span class="na">targetEntityId</span><span
class="o">(<</span><span class="n">ITEM_ID</span><span
class="o">>);</span>
<span class="n">client</span><span class="o">.</span><span
class="na">createEvent</span><span class="o">(</span><span
class="n">viewEvent</span><span class="o">);</span>
-</pre></td> </tr></tbody></table> </div> </div> </div> <p>When the user
"u0" buy item "i0" on time
<code>2014-11-10T13:00:00.123-08:00</code> (current time will be used if
eventTime is not specified), you can send a view event. Run the following
<code>curl</code> command:</p><div class="tabs"> <ul class="control"> <li
data-lang="json"><a href="#tab-879250c9-1156-4359-8ccb-6886a20965c0">REST
API</a></li> <li data-lang="python"><a
href="#tab-b0a23776-bdf0-41f1-a562-acf3348fcdf2">Python SDK</a></li> <li
data-lang="php"><a href="#tab-8cd60c39-3dfd-473d-b48c-84c4719d196d">PHP
SDK</a></li> <li data-lang="ruby"><a
href="#tab-5d9a7e5e-451b-4f74-a407-e9936da2275d">Ruby SDK</a></li> <li
data-lang="java"><a href="#tab-f042760d-f1cf-4580-8b02-6e18cac7f067">Java
SDK</a></li> </ul> <div data-tab="REST API" data-lang="json"
id="tab-879250c9-1156-4359-8ccb-6886a20965c0"> <div class="highlight shell">
<table style="border-spacing: 0"><tbody><tr> <td class="gutter gl" style="text-
align: right"><pre class="lineno">1
+</pre></td> </tr></tbody></table> </div> </div> </div> <p>When the user
"u0" buy item "i0" on time
<code>2014-11-10T13:00:00.123-08:00</code> (current time will be used if
eventTime is not specified), you can send a view event. Run the following
<code>curl</code> command:</p><div class="tabs"> <ul class="control"> <li
data-lang="json"><a href="#tab-91be010e-a624-4164-a18b-08979facf9fa">REST
API</a></li> <li data-lang="python"><a
href="#tab-13d1a996-5da4-4c36-9c5c-b472209505f4">Python SDK</a></li> <li
data-lang="php"><a href="#tab-b632609f-e528-4ddb-9cb4-b5198cc19635">PHP
SDK</a></li> <li data-lang="ruby"><a
href="#tab-d6091ad4-09a5-4184-8135-f9d070e3f079">Ruby SDK</a></li> <li
data-lang="java"><a href="#tab-1ffa4717-ae1a-4d3f-8989-f306ec9bd9e0">Java
SDK</a></li> </ul> <div data-tab="REST API" data-lang="json"
id="tab-91be010e-a624-4164-a18b-08979facf9fa"> <div class="highlight shell">
<table style="border-spacing: 0"><tbody><tr> <td class="gutter gl" style="text-
align: right"><pre class="lineno">1
2
3
4
@@ -356,7 +356,7 @@ Your system is all ready to go.
"targetEntityId" : "i0",
"eventTime" : "2014-11-10T13:00:00.123-08:00"
}'</span>
-</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Python SDK"
data-lang="python" id="tab-b0a23776-bdf0-41f1-a562-acf3348fcdf2"> <div
class="highlight python"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
+</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Python SDK"
data-lang="python" id="tab-13d1a996-5da4-4c36-9c5c-b472209505f4"> <div
class="highlight python"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4
@@ -373,7 +373,7 @@ Your system is all ready to go.
<span class="n">target_entity_type</span><span class="o">=</span><span
class="s">"item"</span><span class="p">,</span>
<span class="n">target_entity_id</span><span class="o">=<</span><span
class="n">ITEM</span> <span class="n">ID</span><span class="o">></span>
<span class="p">)</span>
-</pre></td> </tr></tbody></table> </div> </div> <div data-tab="PHP SDK"
data-lang="php" id="tab-8cd60c39-3dfd-473d-b48c-84c4719d196d"> <div
class="highlight php"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
+</pre></td> </tr></tbody></table> </div> </div> <div data-tab="PHP SDK"
data-lang="php" id="tab-b632609f-e528-4ddb-9cb4-b5198cc19635"> <div
class="highlight php"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4
@@ -392,7 +392,7 @@ Your system is all ready to go.
<span class="s1">'targetEntityId'</span> <span class="o">=></span> <span
class="o"><</span><span class="nx">ITEM</span> <span
class="nx">ID</span><span class="o">></span>
<span class="p">));</span>
<span class="cp">?></span>
-</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Ruby SDK"
data-lang="ruby" id="tab-5d9a7e5e-451b-4f74-a407-e9936da2275d"> <div
class="highlight ruby"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
+</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Ruby SDK"
data-lang="ruby" id="tab-d6091ad4-09a5-4184-8135-f9d070e3f079"> <div
class="highlight ruby"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4
@@ -409,7 +409,7 @@ Your system is all ready to go.
<span class="s1">'targetEntityId'</span> <span class="o">=></span>
<span class="o"><</span><span class="no">ITEM</span> <span
class="no">ID</span><span class="o">></span>
<span class="p">}</span>
<span class="p">)</span>
-</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Java SDK"
data-lang="java" id="tab-f042760d-f1cf-4580-8b02-6e18cac7f067"> <div
class="highlight java"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
+</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Java SDK"
data-lang="java" id="tab-1ffa4717-ae1a-4d3f-8989-f306ec9bd9e0"> <div
class="highlight java"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4
@@ -490,19 +490,19 @@ User u10 buys item i40
</pre></td></tr></tbody></table> </div> <p>When the engine is deployed
successfully and running, you should see a console message similar to the
following:</p><div class="highlight shell"><table style="border-spacing:
0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre
class="lineno">1
2</pre></td><td class="code"><pre><span class="o">[</span>INFO] <span
class="o">[</span>HttpListener] Bound to /0.0.0.0:8000
<span class="o">[</span>INFO] <span class="o">[</span>MasterActor] Bind
successful. Ready to serve.
-</pre></td></tr></tbody></table> </div> <p>Do not kill the deployed engine
process.</p><p>By default, the deployed engine binds to <a
href="http://localhost:8000"><a
href="http://localhost:8000">http://localhost:8000</a></a>. You can visit that
page in your web browser to check its status.</p><p><img alt="Engine Status"
src="/images/engine-server-3246414b.png"/></p></p><h2 id='6.-use-the-engine'
class='header-anchors'>6. Use the Engine</h2><p>Now, You can retrieve predicted
results. To recommend 4 items to user ID "u1". You send this JSON
<code>{ "user": "u1", "num": 4 }</code> to the
deployed engine and it will return a JSON of the recommended items. Simply send
a query by making a HTTP request or through the <code>EngineClient</code> of an
SDK.</p><p>With the deployed engine running, open another terminal and run the
following <code>curl</code> command or use SDK to send the query:</p><div
class="tabs"> <ul class="control"> <li data-lang="js
on"><a href="#tab-d405a92e-2b22-4dcc-915d-3093978bc782">REST API</a></li> <li
data-lang="python"><a href="#tab-30121535-453b-46f5-9572-b454390c7cd9">Python
SDK</a></li> <li data-lang="php"><a
href="#tab-03490a22-7f83-4365-9a4d-84fd2bfdab34">PHP SDK</a></li> <li
data-lang="ruby"><a href="#tab-425d43c5-a783-412a-84b5-c7c8eabd6f8a">Ruby
SDK</a></li> <li data-lang="java"><a
href="#tab-5f1de5e9-5f59-4c78-b8e3-005fe63cbc11">Java SDK</a></li> </ul> <div
data-tab="REST API" data-lang="json"
id="tab-d405a92e-2b22-4dcc-915d-3093978bc782"> <div class="highlight shell">
<table style="border-spacing: 0"><tbody><tr> <td class="gutter gl"
style="text-align: right"><pre class="lineno">1
+</pre></td></tr></tbody></table> </div> <p>Do not kill the deployed engine
process.</p><p>By default, the deployed engine binds to <a
href="http://localhost:8000"><a
href="http://localhost:8000">http://localhost:8000</a></a>. You can visit that
page in your web browser to check its status.</p><p><img alt="Engine Status"
src="/images/engine-server-3246414b.png"/></p></p><h2 id='6.-use-the-engine'
class='header-anchors'>6. Use the Engine</h2><p>Now, You can retrieve predicted
results. To recommend 4 items to user ID "u1". You send this JSON
<code>{ "user": "u1", "num": 4 }</code> to the
deployed engine and it will return a JSON of the recommended items. Simply send
a query by making a HTTP request or through the <code>EngineClient</code> of an
SDK.</p><p>With the deployed engine running, open another terminal and run the
following <code>curl</code> command or use SDK to send the query:</p><div
class="tabs"> <ul class="control"> <li data-lang="js
on"><a href="#tab-ee6f55e4-019b-406d-998a-fcf46b438b7d">REST API</a></li> <li
data-lang="python"><a href="#tab-f8811984-d357-456b-90c4-7ce6ea8503ee">Python
SDK</a></li> <li data-lang="php"><a
href="#tab-56a23702-0ccd-40c6-ad2c-3d397e262e8a">PHP SDK</a></li> <li
data-lang="ruby"><a href="#tab-3dd9e956-fd08-42f2-b1ea-eff0ee847edc">Ruby
SDK</a></li> <li data-lang="java"><a
href="#tab-c9a198e3-1ae3-4e2e-a407-8e8841202674">Java SDK</a></li> </ul> <div
data-tab="REST API" data-lang="json"
id="tab-ee6f55e4-019b-406d-998a-fcf46b438b7d"> <div class="highlight shell">
<table style="border-spacing: 0"><tbody><tr> <td class="gutter gl"
style="text-align: right"><pre class="lineno">1
2
3
4</pre></td> <td class="code"><pre><span class="gp">$ </span>curl -H <span
class="s2">"Content-Type: application/json"</span> <span class="se">\</span>
-d <span class="s1">'{ "user": "u1", "num": 4 }'</span> <span
class="se">\</span>
http://localhost:8000/queries.json
-</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Python SDK"
data-lang="python" id="tab-30121535-453b-46f5-9572-b454390c7cd9"> <div
class="highlight python"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
+</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Python SDK"
data-lang="python" id="tab-f8811984-d357-456b-90c4-7ce6ea8503ee"> <div
class="highlight python"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3</pre></td> <td class="code"><pre><span class="kn">import</span> <span
class="nn">predictionio</span>
<span class="n">engine_client</span> <span class="o">=</span> <span
class="n">predictionio</span><span class="o">.</span><span
class="n">EngineClient</span><span class="p">(</span><span
class="n">url</span><span class="o">=</span><span
class="s">"http://localhost:8000"</span><span class="p">)</span>
<span class="k">print</span> <span class="n">engine_client</span><span
class="o">.</span><span class="n">send_query</span><span
class="p">({</span><span class="s">"user"</span><span class="p">:</span> <span
class="s">"u1"</span><span class="p">,</span> <span class="s">"num"</span><span
class="p">:</span> <span class="mi">4</span><span class="p">})</span>
-</pre></td> </tr></tbody></table> </div> </div> <div data-tab="PHP SDK"
data-lang="php" id="tab-03490a22-7f83-4365-9a4d-84fd2bfdab34"> <div
class="highlight php"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
+</pre></td> </tr></tbody></table> </div> </div> <div data-tab="PHP SDK"
data-lang="php" id="tab-56a23702-0ccd-40c6-ad2c-3d397e262e8a"> <div
class="highlight php"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4
@@ -521,7 +521,7 @@ http://localhost:8000/queries.json
<span class="nb">print_r</span><span class="p">(</span><span
class="nv">$response</span><span class="p">);</span>
<span class="cp">?></span>
-</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Ruby SDK"
data-lang="ruby" id="tab-425d43c5-a783-412a-84b5-c7c8eabd6f8a"> <div
class="highlight ruby"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
+</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Ruby SDK"
data-lang="ruby" id="tab-3dd9e956-fd08-42f2-b1ea-eff0ee847edc"> <div
class="highlight ruby"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4
@@ -534,7 +534,7 @@ http://localhost:8000/queries.json
<span class="n">response</span> <span class="o">=</span> <span
class="n">client</span><span class="p">.</span><span
class="nf">send_query</span><span class="p">(</span><span
class="s1">'user'</span> <span class="o">=></span> <span
class="s1">'i1'</span><span class="p">,</span> <span class="s1">'num'</span>
<span class="o">=></span> <span class="mi">4</span><span class="p">)</span>
<span class="nb">puts</span> <span class="n">response</span>
-</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Java SDK"
data-lang="java" id="tab-5f1de5e9-5f59-4c78-b8e3-005fe63cbc11"> <div
class="highlight java"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
+</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Java SDK"
data-lang="java" id="tab-c9a198e3-1ae3-4e2e-a407-8e8841202674"> <div
class="highlight java"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4
@@ -578,7 +578,7 @@ http://localhost:8000/queries.json
<span class="o">{</span><span class="s2">"item"</span>:<span
class="s2">"i3"</span>,<span
class="s2">"score"</span>:0.003007015026561692<span class="o">}</span>
<span class="o">]</span>
<span class="o">}</span>
-</pre></td></tr></tbody></table> </div> <p><em>MyECommerceRecommendation</em>
is now running.</p> <div class="alert-message info"><p>To update the model
periodically with new data, simply set up a cron job to call <code>pio
train</code> and <code>pio deploy</code>. The engine will continue to serve
prediction results during the re-train process. After the training is
completed, <code>pio deploy</code> will automatically shutdown the existing
engine server and bring up a new process on the same port.</p></div><div
class="alert-message info"><p><strong>Note that if you import a <em>large</em>
data set</strong> and the training seems to be taking forever or getting stuck,
it's likely that there is not enough executor memory. It's recommended
to setup a Spark standalone cluster, you'll need to specify more driver and
executor memory when training with a large data set. Please see <a
href="/resources/faq/#engine-training">FAQ here</a> for instructions.</p></div>
<h2 id='setti
ng-constraint-"unavailableitems"' class='header-anchors'>Setting
constraint "unavailableItems"</h2><p>Now let's send a item
contraint "unavailableItems" (replace accessKey with your Access
Key):</p><div class="alert-message note"><p>You can also use SDK to send this
event as described in the SDK sample above.</p></div><div class="tabs"> <ul
class="control"> <li data-lang="json"><a
href="#tab-25f5dd2c-7aab-4cb1-96fd-ebeff45904e2">REST API</a></li> <li
data-lang="python"><a href="#tab-b612acdd-9ee4-480b-b370-a911e067c440">Python
SDK</a></li> <li data-lang="php"><a
href="#tab-14aaef1a-eb37-4cdf-89cb-deace433c4fa">PHP SDK</a></li> <li
data-lang="ruby"><a href="#tab-4d0e459a-db25-42c1-8327-09251618e89d">Ruby
SDK</a></li> <li data-lang="java"><a
href="#tab-73b43c54-d7a6-48ed-a552-bb18a84f9170">Java SDK</a></li> </ul> <div
data-tab="REST API" data-lang="json"
id="tab-25f5dd2c-7aab-4cb1-96fd-ebeff45904e2"> <div class="highlight shell">
<table style="border-
spacing: 0"><tbody><tr> <td class="gutter gl" style="text-align: right"><pre
class="lineno">1
+</pre></td></tr></tbody></table> </div> <p><em>MyECommerceRecommendation</em>
is now running.</p> <div class="alert-message info"><p>To update the model
periodically with new data, simply set up a cron job to call <code>pio
train</code> and <code>pio deploy</code>. The engine will continue to serve
prediction results during the re-train process. After the training is
completed, <code>pio deploy</code> will automatically shutdown the existing
engine server and bring up a new process on the same port.</p></div><div
class="alert-message info"><p><strong>Note that if you import a <em>large</em>
data set</strong> and the training seems to be taking forever or getting stuck,
it's likely that there is not enough executor memory. It's recommended
to setup a Spark standalone cluster, you'll need to specify more driver and
executor memory when training with a large data set. Please see <a
href="/resources/faq/#engine-training">FAQ here</a> for instructions.</p></div>
<h2 id='setti
ng-constraint-"unavailableitems"' class='header-anchors'>Setting
constraint "unavailableItems"</h2><p>Now let's send a item
contraint "unavailableItems" (replace accessKey with your Access
Key):</p><div class="alert-message note"><p>You can also use SDK to send this
event as described in the SDK sample above.</p></div><div class="tabs"> <ul
class="control"> <li data-lang="json"><a
href="#tab-9b380e9f-5a45-485b-95da-555c694c5a7d">REST API</a></li> <li
data-lang="python"><a href="#tab-34293d77-2db8-4ae9-b4f1-cec18072d403">Python
SDK</a></li> <li data-lang="php"><a
href="#tab-7775c120-1afc-43d7-ac5e-f2b5cb668541">PHP SDK</a></li> <li
data-lang="ruby"><a href="#tab-51016205-ad44-4945-a34c-cd25f1990df0">Ruby
SDK</a></li> <li data-lang="java"><a
href="#tab-6fd8fac0-e9be-4905-b167-237ac5408a3b">Java SDK</a></li> </ul> <div
data-tab="REST API" data-lang="json"
id="tab-9b380e9f-5a45-485b-95da-555c694c5a7d"> <div class="highlight shell">
<table style="border-
spacing: 0"><tbody><tr> <td class="gutter gl" style="text-align: right"><pre
class="lineno">1
2
3
4
@@ -599,7 +599,7 @@ http://localhost:8000/queries.json
}
"eventTime" : "2015-02-17T02:11:21.934Z"
}'</span>
-</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Python SDK"
data-lang="python" id="tab-b612acdd-9ee4-480b-b370-a911e067c440"> <div
class="highlight python"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
+</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Python SDK"
data-lang="python" id="tab-34293d77-2db8-4ae9-b4f1-cec18072d403"> <div
class="highlight python"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4
@@ -618,7 +618,7 @@ http://localhost:8000/queries.json
<span class="s">"items"</span> <span class="p">:</span> <span
class="p">[</span><span class="s">"<ITEM ID1>"</span><span
class="p">,</span> <span class="s">"<ITEM ID2>"</span><span
class="p">]</span>
<span class="p">}</span>
<span class="p">)</span>
-</pre></td> </tr></tbody></table> </div> </div> <div data-tab="PHP SDK"
data-lang="php" id="tab-14aaef1a-eb37-4cdf-89cb-deace433c4fa"> <div
class="highlight php"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
+</pre></td> </tr></tbody></table> </div> </div> <div data-tab="PHP SDK"
data-lang="php" id="tab-7775c120-1afc-43d7-ac5e-f2b5cb668541"> <div
class="highlight php"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4
@@ -635,7 +635,7 @@ http://localhost:8000/queries.json
<span class="s1">'properties'</span> <span class="o">=></span> <span
class="k">array</span><span class="p">(</span><span class="s1">'items'</span>
<span class="o">=></span> <span class="k">array</span><span
class="p">(</span><span class="s1">'<ITEM ID1>'</span><span
class="p">,</span> <span class="s1">'<ITEM ID2>'</span><span
class="p">))</span>
<span class="p">));</span>
<span class="cp">?></span>
-</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Ruby SDK"
data-lang="ruby" id="tab-4d0e459a-db25-42c1-8327-09251618e89d"> <div
class="highlight ruby"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
+</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Ruby SDK"
data-lang="ruby" id="tab-51016205-ad44-4945-a34c-cd25f1990df0"> <div
class="highlight ruby"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4
@@ -650,7 +650,7 @@ http://localhost:8000/queries.json
<span class="s1">'properties'</span> <span class="o">=></span> <span
class="p">{</span> <span class="s1">'items'</span> <span class="o">=></span>
<span class="p">[</span><span class="s1">'<ITEM ID1>'</span><span
class="p">,</span> <span class="s1">'<ITEM ID2>'</span><span
class="p">]</span> <span class="p">}</span>
<span class="p">}</span>
<span class="p">)</span>
-</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Java SDK"
data-lang="java" id="tab-73b43c54-d7a6-48ed-a552-bb18a84f9170"> <div
class="highlight java"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
+</pre></td> </tr></tbody></table> </div> </div> <div data-tab="Java SDK"
data-lang="java" id="tab-6fd8fac0-e9be-4905-b167-237ac5408a3b"> <div
class="highlight java"> <table style="border-spacing: 0"><tbody><tr> <td
class="gutter gl" style="text-align: right"><pre class="lineno">1
2
3
4