From 48a9a871eddb6fc4437030cbbc9fb080012f0921 Mon Sep 17 00:00:00 2001 From: Stephane Gamard Date: Thu, 29 May 2014 02:53:19 +0200 Subject: [PATCH] DAOv.2 - BaseIndex manages nested objects from Normalizer --- .../java/org/sonar/server/search/BaseIndex.java | 16 ++++++++++------ .../java/org/sonar/server/search/IndexField.java | 13 +++++++++++++ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/sonar-server/src/main/java/org/sonar/server/search/BaseIndex.java b/sonar-server/src/main/java/org/sonar/server/search/BaseIndex.java index cc046f55834..cf0e2079738 100644 --- a/sonar-server/src/main/java/org/sonar/server/search/BaseIndex.java +++ b/sonar-server/src/main/java/org/sonar/server/search/BaseIndex.java @@ -199,7 +199,6 @@ public abstract class BaseIndex, K extends Serializable> protected abstract Map mapKey(); - protected Map mapField(IndexField field) { return mapField(field, true); } @@ -209,10 +208,10 @@ public abstract class BaseIndex, K extends Serializable> return mapTextField(field, allowRecursive); } else if (field.type() == IndexField.Type.STRING) { return mapStringField(field, allowRecursive); - } else if (field.type() == IndexField.Type.OBJECT) { - return mapObjectField(field); } else if (field.type() == IndexField.Type.BOOLEAN) { return mapBooleanField(field); + } else if (field.type() == IndexField.Type.OBJECT) { + return mapNestedField(field); } else if (field.type() == IndexField.Type.DATE) { return mapDateField(field); } else { @@ -226,11 +225,16 @@ public abstract class BaseIndex, K extends Serializable> return mapping; } - protected Map mapObjectField(IndexField field) { + protected Map mapNestedField(IndexField field) { Map mapping = new HashMap(); mapping.put("type", "nested"); - mapping.put("index", "analyzed"); - mapping.put("dynamic", "true"); + Map mappings = new HashMap(); + for (IndexField nestedField : field.nestedFields()) { + if(nestedField != null) { + mappings.put(nestedField.field(), mapField(nestedField)); + } + } + mapping.put("properties", mappings); return mapping; } diff --git a/sonar-server/src/main/java/org/sonar/server/search/IndexField.java b/sonar-server/src/main/java/org/sonar/server/search/IndexField.java index 83c2072b04a..76afcee62e1 100644 --- a/sonar-server/src/main/java/org/sonar/server/search/IndexField.java +++ b/sonar-server/src/main/java/org/sonar/server/search/IndexField.java @@ -22,6 +22,9 @@ package org.sonar.server.search; import org.apache.commons.lang.builder.ReflectionToStringBuilder; import org.apache.commons.lang.builder.ToStringStyle; +import java.util.Collection; +import java.util.Collections; + public class IndexField { public static enum Type { @@ -34,13 +37,19 @@ public class IndexField { private final Type type; private final String field; + private final Collection nestedFields; private boolean sortable = false; private boolean searchable = false; IndexField(Type type, String field) { + this(type, field, Collections.EMPTY_LIST); + } + + IndexField(Type type, String field, Collection nestedFields) { this.type = type; this.field = field; + this.nestedFields = nestedFields; } public boolean sortable() { @@ -69,6 +78,10 @@ public class IndexField { return field; } + public Collection nestedFields() { + return this.nestedFields; + } + public String sortField() { if(this.sortable()){ return this.field + ((type == IndexField.Type.TEXT -- 2.39.5