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); }