This is an automated email from the ASF dual-hosted git repository.

jsinovassinnaik pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/unomi.git


The following commit(s) were added to refs/heads/master by this push:
     new ab7d2c099 UNOMI-646 : update documentation (#494)
ab7d2c099 is described below

commit ab7d2c0993f12b04dfb4566d49ef511757205523
Author: jsinovassin <58434978+jsinovas...@users.noreply.github.com>
AuthorDate: Thu Sep 8 17:23:03 2022 +0200

    UNOMI-646 : update documentation (#494)
    
    * UNOMI-646 : update documentation
---
 manual/src/main/asciidoc/datamodel.adoc            |  31 ++++---
 .../main/asciidoc/images/data-model-overview.png   | Bin 280344 -> 0 bytes
 manual/src/main/asciidoc/images/data-model.png     | Bin 0 -> 702077 bytes
 manual/src/main/asciidoc/whats-new.adoc            | 103 +++++++++++++++++----
 4 files changed, 101 insertions(+), 33 deletions(-)

diff --git a/manual/src/main/asciidoc/datamodel.adoc 
b/manual/src/main/asciidoc/datamodel.adoc
index 8f0485735..c4ac43a79 100755
--- a/manual/src/main/asciidoc/datamodel.adoc
+++ b/manual/src/main/asciidoc/datamodel.adoc
@@ -21,15 +21,17 @@ user profiles into segments along user-definable dimensions 
or acted upon by alg
 The following data model only contains the classes and properties directly 
related to the most important objects of Apache Unomi.
 There are other classes that are less central to the functionality but all the 
major ones are represented in the diagram below:
 
-image::data-model-overview.png[]
+image::data-model.png[]
 
 We will detail many of these classes in the document below.
 
 === Scope
 
-Scopes are not actually an object in the system, but simply unique strings 
that are used to "classify" objects.
+Scopes are objects which simply contains unique strings that are used to 
"classify" objects.
 For example, when using scopes with a web content management system, a scope 
could be associated with a site identifier or even a host name.
 
+In events, scopes are used to validate event. Events with scope which are 
unknown by the system will be considered as invalid
+
 ____
 
 Unomi defines a built-in scope (called `systemscope`) that clients can use to 
share data across scopes.
@@ -204,12 +206,16 @@ Inherits all the fields from: <<Item>>
 
 | scope | String | (Optional, event type specific) An identifier for a scope
 
+| persistent | Boolean | Defines if the event should be persisted or not 
(default: true)
+
 | source | <<Item>> | An Item that is the source of the event. For example a 
web site, an application name, a web page
 
 | target | <<Item>> | An Item that is the target of the event. For example a 
button, a link, a file or a page
 
 | properties | Map<String,Object> | Properties for the event. These will 
change depending on the event type.
 
+| flattenedProperties | Map<String,Object> | Properties that will be persisted 
as flattened. These will change depending on the event type.
+
 |===
 
 ==== Event types
@@ -253,7 +259,7 @@ Inherits all the fields from: <<Item>>
 
 | scores | Map<String,Integer> | A map of scores with the score identifier as 
the key and the score total value as the value.
 
-| mergedWith | String | If merged with another profile, the profile identifier 
to the master profile is stored here
+| @Deprecated mergedWith | String | If merged with another profile, the 
profile identifier to the master profile is stored here
 
 | consents | Map<String,<<Consent>>> | The consents for the profile, as a map 
with the consent identifier as a key and the Consent object type as a value.
 
@@ -314,13 +320,13 @@ image::profile.png[]
         "lists": [
             "userListId"
         ],
-"goals": {
-    "viewLanguagePageGoalTargetReached": "2020-02-10T19:30:31Z",
-    "downloadGoalExampleTargetReached": "2020-02-10T15:22:41Z",
-    "viewLandingPageGoalStartReached": "2020-02-10T19:30:27Z",
-    "downloadGoalExampleStartReached": "2020-02-10T19:30:27Z",
-    "optimizationTestGoalStartReached": "2020-02-10T19:30:27Z"
-}
+        "goals": {
+            "viewLanguagePageGoalTargetReached": "2020-02-10T19:30:31Z",
+            "downloadGoalExampleTargetReached": "2020-02-10T15:22:41Z",
+            "viewLandingPageGoalStartReached": "2020-02-10T19:30:27Z",
+            "downloadGoalExampleStartReached": "2020-02-10T19:30:27Z",
+            "optimizationTestGoalStartReached": "2020-02-10T19:30:27Z"
+        }
     },
     "segments": [
         "leads",
@@ -394,7 +400,6 @@ In the following example a Persona represents a visitor 
from Europe, that can be
     "systemProperties": {},
     "segments": [],
     "scores": null,
-    "mergedWith": null,
     "consents": {}
 }
 ----
@@ -786,7 +791,7 @@ Inherits all the fields from: <<MetadataItem>>
 
 ==== Example
 
-In this exmample we should the default `updateProperties` built-in rule that 
matches the `updateProperties` event and
+In this example we can see the default `updateProperties` built-in rule that 
matches the `updateProperties` event and
 executes the built-in `updatePropertiesAction`
 
 [source,json]
@@ -1001,7 +1006,7 @@ Inherits all the fields from: <<MetadataItem>>
 
 In the following example a campaign that starts January 1st 31, 2020 at 8:38am 
and finished on February 29th, 2020 at the same time has the following entry 
condition: the session duration must be less or equal to 3000 milliseconds (3 
seconds) and the profile has viewed the “about” page on the “digitall” website.
 The cost of the campaign is USD 1’000’000 and the timezone is Europe/Zurich.
-The primary goal for the campaign is the goal we should as an example in the 
Goal section.
+The primary goal for the campaign is the goal we should have as an example in 
the Goal section.
 
 [source,json]
 ----
diff --git a/manual/src/main/asciidoc/images/data-model-overview.png 
b/manual/src/main/asciidoc/images/data-model-overview.png
deleted file mode 100755
index 8243b9e6e..000000000
Binary files a/manual/src/main/asciidoc/images/data-model-overview.png and 
/dev/null differ
diff --git a/manual/src/main/asciidoc/images/data-model.png 
b/manual/src/main/asciidoc/images/data-model.png
new file mode 100644
index 000000000..e63d771a4
Binary files /dev/null and b/manual/src/main/asciidoc/images/data-model.png 
differ
diff --git a/manual/src/main/asciidoc/whats-new.adoc 
b/manual/src/main/asciidoc/whats-new.adoc
index b04296865..97e5a1661 100644
--- a/manual/src/main/asciidoc/whats-new.adoc
+++ b/manual/src/main/asciidoc/whats-new.adoc
@@ -13,14 +13,14 @@
 //
 === What's new in Apache Unomi 2.0
 
-Apache Unomi 2 is a new release focused on improving core functionalities and 
robustness of the product. 
+Apache Unomi 2 is a new release focused on improving core functionalities and 
robustness of the product.
 The introduction of tighter data validation with JSON Schemas required some 
changes in the product data model, which presented an opportunity for 
noticeable improvements in the overall performance.
 
 This new release also introduces a first (beta) version of the Unomi GraphQL 
API.
 
 ==== Scopes declarations are now required
 
-Scopes declarations are now required in Unomi 2. When submitting an event and 
specifying a scope, 
+Scopes declarations are now required in Unomi 2. When submitting an event and 
specifying a scope,
 that scope must already be declared on the platform.
 
 Scopes can be easily created via the corresponding REST API (`cxs/scopes`)
@@ -39,8 +39,8 @@ curl --location --request POST 
'http://localhost:8181/cxs/scopes' \
 
 ==== JSON Schemas
 
-Apache Unomi 2 introduces support for 
https://json-schema.org/specification.html[JSON Schema] for all of its publicly 
exposed endpoints. 
-Data received by Apache Unomi 2 will first be validated against a known schema 
to make sure it complies with an expected payload. 
+Apache Unomi 2 introduces support for 
https://json-schema.org/specification.html[JSON Schema] for all of its publicly 
exposed endpoints.
+Data received by Apache Unomi 2 will first be validated against a known schema 
to make sure it complies with an expected payload.
 If the received payload does not match a known schema, it will be rejected by 
Apache Unomi 2.
 
 Apache Unomi 2 also introduces a set of administrative endpoints allowing new 
schemas and/or schemas extensions to be registered.
@@ -51,11 +51,50 @@ More details about JSON Schemas implementation are 
available in the <<JSON schem
 
 The introduction of JSON schema required us to modify Apache Unomi data model, 
One of the key differences is the removal of open maps.
 
-For example, the following event model in Apache Unomi 1.x:
+The properties field in the events objects provided by unomi are now 
restricted by JSON schema.
+This means object properties must be declared in a JSON schema for an event to 
be accepted.
+
+A new property, flattenedProperties has been introduced to the event object, 
this property has been added to store the properties as
+flattened in Elasticsearch and should avoid mapping explosion for dynamic 
properties.
+
+If there is dynamic properties that you want to send with your event, you 
should use the flattenedProperties field of the event.
+
+It's also necessary to specify the format of the values which are added to 
flattenedProperties by JSON schema but these value will be
+stored as flattened and will not create dynamic mapping contrary to the 
properties field of the events.
+
+Here is an example for objects that used dynamic properties for URL parameters:
+
+The following event example in Apache Unomi 1.x:
 [source]
 ----
 {
-    "TODO": "ADD JSON"
+    "eventType":"view",
+    "scope":"digitall",
+    "properties":{
+        "URLParameters":{
+           "utm_source":"source"
+        }
+    },
+    "target":{
+        "scope":"digitall",
+        "itemId":"30c0a9e3-4330-417d-9c66-4c1beec85f08",
+        "itemType":"page",
+        "properties":{
+           "pageInfo":{
+              "pageID":"30c0a9e3-4330-417d-9c66-4c1beec85f08",
+              "nodeType":"jnt:page",
+              "pageName":"Home",
+              ...
+           },
+           "attributes":{},
+           "consentTypes":[]
+        }
+    },
+    "source":{
+        "scope":"digitall",
+        "itemId":"ff5886e0-d75a-4061-9de9-d90dfc9e18d8",
+        "itemType":"site"
+    }
 }
 ----
 
@@ -63,14 +102,38 @@ Is replaced by the following in Apache Unomi 2.x:
 [source]
 ----
 {
-    "TODO": "ADD JSON"
+    "eventType":"view",
+    "scope":"digitall",
+    "flattenedProperties":{
+        "URLParameters":{
+           "utm_source":"source"
+        }
+    },
+    "target":{
+        "scope":"digitall",
+        "itemId":"30c0a9e3-4330-417d-9c66-4c1beec85f08",
+        "itemType":"page",
+        "properties":{
+           "pageInfo":{
+              "pageID":"30c0a9e3-4330-417d-9c66-4c1beec85f08",
+              "nodeType":"jnt:page",
+              "pageName":"Home",
+              ...
+           },
+           "attributes":{},
+           "consentTypes":[]
+        }
+    },
+    "source":{
+        "scope":"digitall",
+        "itemId":"ff5886e0-d75a-4061-9de9-d90dfc9e18d8",
+        "itemType":"site"
+    }
 }
 ----
 
-Most objects were refactored as part of this new release. 
-
-If using the default Apache 1.x data model, our Unomi 2 migration process will 
handle the data model changes for you. 
-If you are using custom events/objects, please refer to the detailed migration 
guide for more details. 
+If using the default Apache 1.x data model, our Unomi 2 migration process will 
handle the data model changes for you.
+If you are using custom events/objects, please refer to the detailed migration 
guide for more details.
 
 ==== Removal of the Web Tracker
 
@@ -82,8 +145,8 @@ use case.
 
 ==== GraphQL API - beta
 
-Apache Unomi 2.0 sees the introduction of a new (beta) GraphQL API. 
-Available behind a feature flag (the API disabled by default), the GraphQL API 
is available for you to play with. 
+Apache Unomi 2.0 sees the introduction of a new (beta) GraphQL API.
+Available behind a feature flag (the API disabled by default), the GraphQL API 
is available for you to play with.
 
 More details about how to enable/disable the GraphQL API are available in the 
<<GraphQL API,corresponding section>> of the documentation.
 
@@ -91,20 +154,20 @@ We welcome tickets/PRs to improve its robustness and 
progressively make it ready
 
 ==== Migrate from Unomi 1.x
 
-To facilitate migration we prepared a set of scripts that will automatically 
handle the migration of your data from Apache Unomi 1.5+ to Apache Unomi 2.0. 
+To facilitate migration we prepared a set of scripts that will automatically 
handle the migration of your data from Apache Unomi 1.5+ to Apache Unomi 2.0.
 
-It is worth keeping in mind that for Apache Unomi 2.0 we do not support “hot” 
migration, 
+It is worth keeping in mind that for Apache Unomi 2.0 we do not support “hot” 
migration,
 the migration process will require a shutdown of your cluster to guarantee 
that no new events will be collected while data migration is in progress.
 
-Special caution must be taken if you declared custom events as our migration 
scripts can only handle objects we know of. 
+Special caution must be taken if you declared custom events as our migration 
scripts can only handle objects we know of.
 More details about migration (incl. of custom events) is available in the 
corresponding section <<Migrations,corresponding section>> of the documentation.
 
 ==== Elasticsearch compatibility
 
-We currently recommend using Elasticsearch 7.17.5 with Apache Unomi 2.0, 
+We currently recommend using Elasticsearch 7.17.5 with Apache Unomi 2.0,
 this ensure you are on a recent version that is not impacted by the log4j 
vulnerabilities (fixed in Elasticsearch 7.16.3).
 
-This version increase is releated to Apache Unomi 2.0 makeing use of a new 
Elasticsearch field type 
-called 
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/flattened.html[Flattened],
 
-and although it was available in prior versions of Elasticsearch, we do not 
recommend using those 
+This version increase is releated to Apache Unomi 2.0 makeing use of a new 
Elasticsearch field type
+called 
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/flattened.html[Flattened],
+and although it was available in prior versions of Elasticsearch, we do not 
recommend using those
 due to the above-mentioned log4j vulnerabilities.

Reply via email to