From b4c3e508316175b6e465d3f217faa41d6efa2f33 Mon Sep 17 00:00:00 2001
From: blavenie <benoit.lavenier@e-is.pro>
Date: Tue, 9 Aug 2016 19:25:58 +0200
Subject: [PATCH] - Add index type : registry/comment

---
 .../service/AbstractService.java              | 46 ++++++++++++++
 .../elasticsearch/service/MarketService.java  | 58 +++--------------
 .../service/RegistryService.java              | 62 +++++++++++++++++--
 3 files changed, 111 insertions(+), 55 deletions(-)

diff --git a/duniter4j-elasticsearch/src/main/java/org/duniter/elasticsearch/service/AbstractService.java b/duniter4j-elasticsearch/src/main/java/org/duniter/elasticsearch/service/AbstractService.java
index 0e29f0c7..e167691c 100644
--- a/duniter4j-elasticsearch/src/main/java/org/duniter/elasticsearch/service/AbstractService.java
+++ b/duniter4j-elasticsearch/src/main/java/org/duniter/elasticsearch/service/AbstractService.java
@@ -295,6 +295,52 @@ public abstract class AbstractService implements Bean {
         }
     }
 
+    protected XContentBuilder createRecordCommentType(String index, String type) {
+        String stringAnalyzer = pluginSettings.getDefaultStringAnalyzer();
+
+        try {
+            XContentBuilder mapping = XContentFactory.jsonBuilder().startObject().startObject(type)
+                    .startObject("properties")
+
+                    // issuer
+                    .startObject("issuer")
+                    .field("type", "string")
+                    .field("index", "not_analyzed")
+                    .endObject()
+
+                    // time
+                    .startObject("time")
+                    .field("type", "integer")
+                    .endObject()
+
+                    // message
+                    .startObject("message")
+                    .field("type", "string")
+                    .field("analyzer", stringAnalyzer)
+                    .endObject()
+
+                    // record
+                    .startObject("record")
+                    .field("type", "string")
+                    .field("index", "not_analyzed")
+                    .endObject()
+
+                    // reply to
+                    .startObject("reply_to")
+                    .field("type", "string")
+                    .field("index", "not_analyzed")
+                    .endObject()
+
+                    .endObject()
+                    .endObject().endObject();
+
+            return mapping;
+        }
+        catch(IOException ioe) {
+            throw new TechnicalException(String.format("Error while getting mapping for index [%s/%s]: %s", index, type, ioe.getMessage()), ioe);
+        }
+    }
+
     public interface StringReaderHandler {
 
         String onReadLine(String line);
diff --git a/duniter4j-elasticsearch/src/main/java/org/duniter/elasticsearch/service/MarketService.java b/duniter4j-elasticsearch/src/main/java/org/duniter/elasticsearch/service/MarketService.java
index 6fe07d89..ba8653b4 100644
--- a/duniter4j-elasticsearch/src/main/java/org/duniter/elasticsearch/service/MarketService.java
+++ b/duniter4j-elasticsearch/src/main/java/org/duniter/elasticsearch/service/MarketService.java
@@ -109,7 +109,7 @@ public class MarketService extends AbstractService {
         createIndexRequestBuilder.setSettings(indexSettings);
         createIndexRequestBuilder.addMapping(RECORD_CATEGORY_TYPE, createRecordCategoryType());
         createIndexRequestBuilder.addMapping(RECORD_TYPE, createRecordType());
-        createIndexRequestBuilder.addMapping(RECORD_COMMENT_TYPE, createRecordCommentType());
+        createIndexRequestBuilder.addMapping(RECORD_COMMENT_TYPE, createRecordCommentType(INDEX, RECORD_COMMENT_TYPE));
         createIndexRequestBuilder.execute().actionGet();
 
         return this;
@@ -371,18 +371,22 @@ public class MarketService extends AbstractService {
                     .field("type", "integer")
                     .endObject()
 
-                    // categories
-                    .startObject("categories")
+                    // category
+                    .startObject("category")
                     .field("type", "nested")
+                    .field("dynamic", "false")
                     .startObject("properties")
-                    .startObject("cat1") // cat1
+                    .startObject("id") // author
                     .field("type", "string")
                     .field("index", "not_analyzed")
                     .endObject()
-                    .startObject("cat2") // cat2
+                    .startObject("parent") // author
                     .field("type", "string")
                     .field("index", "not_analyzed")
                     .endObject()
+                    .startObject("name") // author
+                    .field("type", "string")
+                    .endObject()
                     .endObject()
                     .endObject()
 
@@ -404,50 +408,6 @@ public class MarketService extends AbstractService {
         }
     }
 
-    public XContentBuilder createRecordCommentType() {
-        String stringAnalyzer = pluginSettings.getDefaultStringAnalyzer();
-
-        try {
-            XContentBuilder mapping = XContentFactory.jsonBuilder().startObject().startObject(RECORD_COMMENT_TYPE)
-                    .startObject("properties")
-
-                    // issuer
-                    .startObject("issuer")
-                    .field("type", "string")
-                    .field("index", "not_analyzed")
-                    .endObject()
-
-                    // time
-                    .startObject("time")
-                    .field("type", "integer")
-                    .endObject()
-
-                    // message
-                    .startObject("message")
-                    .field("type", "string")
-                    .field("analyzer", stringAnalyzer)
-                    .endObject()
-
-                    // record
-                    .startObject("record")
-                    .field("type", "string")
-                    .field("index", "not_analyzed")
-                    .endObject()
 
-                    // reply to
-                    .startObject("reply_to")
-                    .field("type", "string")
-                    .field("index", "not_analyzed")
-                    .endObject()
-
-                    .endObject()
-                    .endObject().endObject();
-
-            return mapping;
-        }
-        catch(IOException ioe) {
-            throw new TechnicalException(String.format("Error while getting mapping for index [%s/%s]: %s", INDEX, RECORD_COMMENT_TYPE, ioe.getMessage()), ioe);
-        }
-    }
 
 }
diff --git a/duniter4j-elasticsearch/src/main/java/org/duniter/elasticsearch/service/RegistryService.java b/duniter4j-elasticsearch/src/main/java/org/duniter/elasticsearch/service/RegistryService.java
index 9f595ec0..0a448fb4 100644
--- a/duniter4j-elasticsearch/src/main/java/org/duniter/elasticsearch/service/RegistryService.java
+++ b/duniter4j-elasticsearch/src/main/java/org/duniter/elasticsearch/service/RegistryService.java
@@ -74,6 +74,7 @@ public class RegistryService extends AbstractService {
     public static final String INDEX = "registry";
     public static final String RECORD_TYPE = "record";
     public static final String RECORD_CATEGORY_TYPE = "category";
+    public static final String RECORD_COMMENT_TYPE = "comment";
     public static final String CURRENCY_TYPE = "currency";
     private static final String CATEGORIES_BULK_CLASSPATH_FILE = "registry-categories-bulk-insert.json";
 
@@ -125,6 +126,7 @@ public class RegistryService extends AbstractService {
         createIndexRequestBuilder.addMapping(CURRENCY_TYPE, createCurrencyType());
         createIndexRequestBuilder.addMapping(RECORD_CATEGORY_TYPE, createRecordCategoryType());
         createIndexRequestBuilder.addMapping(RECORD_TYPE, createRecordType());
+        createIndexRequestBuilder.addMapping(RECORD_COMMENT_TYPE, createRecordCommentType(INDEX, RECORD_COMMENT_TYPE));
         createIndexRequestBuilder.execute().actionGet();
 
         return this;
@@ -394,8 +396,19 @@ public class RegistryService extends AbstractService {
                     .field("index", "not_analyzed")
                     .endObject()
 
-                    // location
-                    .startObject("location")
+                    // pubkey
+                    .startObject("pubkey")
+                    .field("type", "string")
+                    .field("index", "not_analyzed")
+                    .endObject()
+
+                    // address
+                    .startObject("address")
+                    .field("type", "string")
+                    .endObject()
+
+                    // city
+                    .startObject("city")
                     .field("type", "string")
                     .endObject()
 
@@ -424,18 +437,55 @@ public class RegistryService extends AbstractService {
                     .endObject()
                     .endObject()
 
-                    // categories
-                    .startObject("categories")
+                    // pictures
+                    .startObject("pictures")
+                    .field("type", "nested")
+                    .field("dynamic", "false")
+                    .startObject("properties")
+                    .startObject("file") // file
+                    .field("type", "attachment")
+                    .startObject("fields")
+                    .startObject("content") // content
+                    .field("index", "no")
+                    .endObject()
+                    .startObject("title") // title
+                    .field("type", "string")
+                    .field("store", "yes")
+                    .field("analyzer", stringAnalyzer)
+                    .endObject()
+                    .startObject("author") // author
+                    .field("type", "string")
+                    .field("store", "no")
+                    .endObject()
+                    .startObject("content_type") // content_type
+                    .field("store", "yes")
+                    .endObject()
+                    .endObject()
+                    .endObject()
+                    .endObject()
+                    .endObject()
+
+                    // picturesCount
+                    .startObject("picturesCount")
+                    .field("type", "integer")
+                    .endObject()
+
+                    // category
+                    .startObject("category")
                     .field("type", "nested")
+                    .field("dynamic", "false")
                     .startObject("properties")
-                    .startObject("cat1") // cat1
+                    .startObject("id") // author
                     .field("type", "string")
                     .field("index", "not_analyzed")
                     .endObject()
-                    .startObject("cat2") // cat2
+                    .startObject("parent") // author
                     .field("type", "string")
                     .field("index", "not_analyzed")
                     .endObject()
+                    .startObject("name") // author
+                    .field("type", "string")
+                    .endObject()
                     .endObject()
                     .endObject()
 
-- 
GitLab