UNOMI-54 : Add mappings for scoring and userList + add score mapping in profile


Project: http://git-wip-us.apache.org/repos/asf/incubator-unomi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-unomi/commit/c63d85e3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-unomi/tree/c63d85e3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-unomi/diff/c63d85e3

Branch: refs/heads/UNOMI-28-ES-2-X-UPGRADE
Commit: c63d85e39ea6eb801bd7f3636420051d5b33fa39
Parents: ec58db2
Author: Quentin Lamerand <qlamer...@jahia.com>
Authored: Fri Aug 26 15:19:08 2016 +0200
Committer: Quentin Lamerand <qlamer...@jahia.com>
Committed: Fri Aug 26 15:19:08 2016 +0200

----------------------------------------------------------------------
 .../META-INF/cxs/mappings/userList.json         | 44 +++++++++++++-
 .../ElasticSearchPersistenceServiceImpl.java    | 35 +++++++----
 .../META-INF/cxs/mappings/scoring.json          | 62 ++++++++++++++++++++
 .../persistence/spi/PersistenceService.java     |  9 ++-
 .../services/services/EventServiceImpl.java     |  7 ++-
 .../services/services/ProfileServiceImpl.java   |  2 +-
 .../services/services/SegmentServiceImpl.java   | 15 +++++
 7 files changed, 156 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/c63d85e3/extensions/lists-extension/services/src/main/resources/META-INF/cxs/mappings/userList.json
----------------------------------------------------------------------
diff --git 
a/extensions/lists-extension/services/src/main/resources/META-INF/cxs/mappings/userList.json
 
b/extensions/lists-extension/services/src/main/resources/META-INF/cxs/mappings/userList.json
index 8a8b9de..3bb8ae0 100644
--- 
a/extensions/lists-extension/services/src/main/resources/META-INF/cxs/mappings/userList.json
+++ 
b/extensions/lists-extension/services/src/main/resources/META-INF/cxs/mappings/userList.json
@@ -11,6 +11,48 @@
           }
         }
       }
-    ]
+    ],
+    "properties": {
+      "itemId": {
+        "type": "string",
+        "analyzer": "folding"
+      },
+      "itemType": {
+        "type": "string",
+        "analyzer": "folding"
+      },
+      "metadata": {
+        "properties": {
+          "description": {
+            "type": "string",
+            "analyzer": "folding"
+          },
+          "enabled": {
+            "type": "boolean"
+          },
+          "hidden": {
+            "type": "boolean"
+          },
+          "id": {
+            "type": "string",
+            "analyzer": "folding"
+          },
+          "missingPlugins": {
+            "type": "boolean"
+          },
+          "name": {
+            "type": "string",
+            "analyzer": "folding"
+          },
+          "readOnly": {
+            "type": "boolean"
+          },
+          "scope": {
+            "type": "string",
+            "analyzer": "folding"
+          }
+        }
+      }
+    }
   }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/c63d85e3/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/ElasticSearchPersistenceServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/ElasticSearchPersistenceServiceImpl.java
 
b/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/ElasticSearchPersistenceServiceImpl.java
index 7bf2f14..9e59f63 100644
--- 
a/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/ElasticSearchPersistenceServiceImpl.java
+++ 
b/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/ElasticSearchPersistenceServiceImpl.java
@@ -279,6 +279,10 @@ public class ElasticSearchPersistenceServiceImpl 
implements PersistenceService,
                     }
 
                     internalCreateIndex(indexName, indexMappings);
+                } else {
+                    for (Map.Entry<String, String> entry : 
mappings.entrySet()) {
+                        createMapping(entry.getKey(), entry.getValue());
+                    }
                 }
 
                 client.admin().indices().preparePutTemplate(indexName + 
"_monthlyindex")
@@ -416,17 +420,10 @@ public class ElasticSearchPersistenceServiceImpl 
implements PersistenceService,
                 while ((l = reader.readLine()) != null) {
                     content.append(l);
                 }
-                mappings.put(name, content.toString());
+                String mappingSource = content.toString();
+                mappings.put(name, mappingSource);
                 if (createMapping) {
-                    if (itemsMonthlyIndexed.contains(name)) {
-                        createMapping(name, content.toString(), indexName + 
"-*");
-                    } else if (indexNames.containsKey(name)) {
-                        if 
(client.admin().indices().prepareExists(indexNames.get(name)).execute().actionGet().isExists())
 {
-                            createMapping(name, content.toString(), 
indexNames.get(name));
-                        }
-                    } else {
-                        createMapping(name, content.toString(), indexName);
-                    }
+                    createMapping(name, mappingSource);
                 }
             } catch (Exception e) {
                 logger.error("Error while loading mapping definition " + 
predefinedMappingURL, e);
@@ -685,17 +682,29 @@ public class ElasticSearchPersistenceServiceImpl 
implements PersistenceService,
     }
 
 
-    private boolean createMapping(final String type, final String source, 
final String indexName) {
+    private void createMapping(final String type, final String source, final 
String indexName) {
         client.admin().indices()
                 .preparePutMapping(indexName)
                 .setType(type)
                 .setSource(source)
                 .execute().actionGet();
-        return true;
     }
 
     @Override
-    public Map<String, Map<String, Object>> getMapping(final String itemType) {
+    public void createMapping(String type, String source) {
+        if (itemsMonthlyIndexed.contains(type)) {
+            createMapping(type, source, indexName + "-*");
+        } else if (indexNames.containsKey(type)) {
+            if 
(client.admin().indices().prepareExists(indexNames.get(type)).execute().actionGet().isExists())
 {
+                createMapping(type, source, indexNames.get(type));
+            }
+        } else {
+            createMapping(type, source, indexName);
+        }
+    }
+
+    @Override
+    public Map<String, Map<String, Object>> getPropertiesMapping(final String 
itemType) {
         return new InClassLoaderExecute<Map<String, Map<String, Object>>>() {
             @SuppressWarnings("unchecked")
             protected Map<String, Map<String, Object>> execute(Object... args) 
{

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/c63d85e3/persistence-elasticsearch/core/src/main/resources/META-INF/cxs/mappings/scoring.json
----------------------------------------------------------------------
diff --git 
a/persistence-elasticsearch/core/src/main/resources/META-INF/cxs/mappings/scoring.json
 
b/persistence-elasticsearch/core/src/main/resources/META-INF/cxs/mappings/scoring.json
new file mode 100644
index 0000000..b62d0a6
--- /dev/null
+++ 
b/persistence-elasticsearch/core/src/main/resources/META-INF/cxs/mappings/scoring.json
@@ -0,0 +1,62 @@
+{
+  "scoring": {
+    "dynamic_templates": [
+      {
+        "all": {
+          "match": "*",
+          "match_mapping_type": "string",
+          "mapping": {
+            "type": "string",
+            "analyzer": "folding"
+          }
+        }
+      }
+    ],
+    "properties": {
+      "itemId": {
+        "type": "string",
+        "analyzer": "folding"
+      },
+      "itemType": {
+        "type": "string",
+        "analyzer": "folding"
+      },
+      "metadata": {
+        "properties": {
+          "description": {
+            "type": "string",
+            "analyzer": "folding"
+          },
+          "enabled": {
+            "type": "boolean"
+          },
+          "hidden": {
+            "type": "boolean"
+          },
+          "id": {
+            "type": "string",
+            "analyzer": "folding"
+          },
+          "missingPlugins": {
+            "type": "boolean"
+          },
+          "name": {
+            "type": "string",
+            "analyzer": "folding"
+          },
+          "readOnly": {
+            "type": "boolean"
+          },
+          "scope": {
+            "type": "string",
+            "analyzer": "folding"
+          },
+          "tags": {
+            "type": "string",
+            "analyzer": "folding"
+          }
+        }
+      }
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/c63d85e3/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/PersistenceService.java
----------------------------------------------------------------------
diff --git 
a/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/PersistenceService.java
 
b/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/PersistenceService.java
index fc64d55..90b0efc 100644
--- 
a/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/PersistenceService.java
+++ 
b/persistence-spi/src/main/java/org/apache/unomi/persistence/spi/PersistenceService.java
@@ -168,7 +168,14 @@ public interface PersistenceService {
      * @param itemType
      * @return
      */
-    Map<String, Map<String, Object>> getMapping(String itemType);
+    Map<String, Map<String, Object>> getPropertiesMapping(String itemType);
+
+    /**
+     * Create mapping
+     * @param type
+     * @param source
+     */
+    void createMapping(String type, String source);
 
     /**
      * TODO

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/c63d85e3/services/src/main/java/org/apache/unomi/services/services/EventServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/services/src/main/java/org/apache/unomi/services/services/EventServiceImpl.java
 
b/services/src/main/java/org/apache/unomi/services/services/EventServiceImpl.java
index 70bd06d..2a39eb1 100644
--- 
a/services/src/main/java/org/apache/unomi/services/services/EventServiceImpl.java
+++ 
b/services/src/main/java/org/apache/unomi/services/services/EventServiceImpl.java
@@ -18,7 +18,10 @@
 package org.apache.unomi.services.services;
 
 import org.apache.commons.lang3.StringUtils;
-import org.apache.unomi.api.*;
+import org.apache.unomi.api.Event;
+import org.apache.unomi.api.EventProperty;
+import org.apache.unomi.api.PartialList;
+import org.apache.unomi.api.Session;
 import org.apache.unomi.api.actions.ActionPostExecutor;
 import org.apache.unomi.api.conditions.Condition;
 import org.apache.unomi.api.services.DefinitionsService;
@@ -164,7 +167,7 @@ public class EventServiceImpl implements EventService {
 
     @Override
     public List<EventProperty> getEventProperties() {
-        Map<String, Map<String, Object>> mappings = 
persistenceService.getMapping(Event.ITEM_TYPE);
+        Map<String, Map<String, Object>> mappings = 
persistenceService.getPropertiesMapping(Event.ITEM_TYPE);
         List<EventProperty> props = new ArrayList<>(mappings.size());
         getEventProperties(mappings, props, "");
         return props;

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/c63d85e3/services/src/main/java/org/apache/unomi/services/services/ProfileServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/services/src/main/java/org/apache/unomi/services/services/ProfileServiceImpl.java
 
b/services/src/main/java/org/apache/unomi/services/services/ProfileServiceImpl.java
index aee8832..4e680fc 100644
--- 
a/services/src/main/java/org/apache/unomi/services/services/ProfileServiceImpl.java
+++ 
b/services/src/main/java/org/apache/unomi/services/services/ProfileServiceImpl.java
@@ -299,7 +299,7 @@ public class ProfileServiceImpl implements ProfileService, 
SynchronousBundleList
         Set<PropertyType> filteredProperties = new 
LinkedHashSet<PropertyType>();
         // TODO: here we limit the result to the definition we have, but what 
if some properties haven't definition but exist in ES mapping ?
         Set<PropertyType> profileProperties = getPropertyTypeByTag(tagId, 
true);
-        Map<String, Map<String, Object>> itemMapping = 
persistenceService.getMapping(itemType);
+        Map<String, Map<String, Object>> itemMapping = 
persistenceService.getPropertiesMapping(itemType);
 
         if (itemMapping == null || itemMapping.isEmpty() || 
itemMapping.get("properties") == null || 
itemMapping.get("properties").get("properties") == null) {
             return filteredProperties;

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/c63d85e3/services/src/main/java/org/apache/unomi/services/services/SegmentServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/services/src/main/java/org/apache/unomi/services/services/SegmentServiceImpl.java
 
b/services/src/main/java/org/apache/unomi/services/services/SegmentServiceImpl.java
index 85c6dc3..7263b28 100644
--- 
a/services/src/main/java/org/apache/unomi/services/services/SegmentServiceImpl.java
+++ 
b/services/src/main/java/org/apache/unomi/services/services/SegmentServiceImpl.java
@@ -532,6 +532,21 @@ public class SegmentServiceImpl implements SegmentService, 
SynchronousBundleList
         // make sure we update the name and description metadata that might 
not match, so first we remove the entry from the map
         persistenceService.save(scoring);
 
+        persistenceService.createMapping(Profile.ITEM_TYPE, String.format(
+                "{\n" +
+                "    \"profile\": {\n" +
+                "        \"properties\" : {\n" +
+                "            \"scores\": {\n" +
+                "                \"properties\": {\n" +
+                "                    \"%s\": {\n" +
+                "                        \"type\": \"long\"\n" +
+                "                    }\n" +
+                "                }\n" +
+                "            }\n" +
+                "        }\n" +
+                "    }\n" +
+                "}\n", scoring.getItemId()));
+
         updateExistingProfilesForScoring(scoring);
     }
 

Reply via email to