2015-07-28 5 views
1

Я работаю над проектом с Elasticsearch и данными Spring Elicsearch.Получить сопоставление поля типа объекта в Spring Data Elasticsearch

Мне нужно получить отображение типа объекта моего индекса. Мой @document класс выглядит следующим образом:

@Document(indexName = "esbsdocuments", type = ESBSDocumentEls.MAPPING_TYPE) 
    public class ESBSDocumentEls extends ESBSDomainModel { 

    ... 

    @Field(type =FieldType.Object, store = false) 
     private Object metadata; 

    ... 
    } 

Если я пытаюсь получить его через http://xxx:9200/_mapping я могу получить отображение для поля «метаданных» правильно:

... 

"metadata": { 
      "properties": { 
       "APP": { 
       "type": "string" 
       }, 
       "APPDST": { 
       "type": "string" 
       }, 
       "APPSUB": { 
       "type": "string" 
       }, 
       "COUNTSUB": { 
       "type": "string" 
       }, 
       "DOMINIO": { 
       "type": "string" 
       }, 
       "DUPLICATE": { 
       "type": "string" 
       }, 
       "EXCLUDEFIELDNAMES": { 
       "type": "string" 
       }, 
       "FECHA": { 
       "type": "string" 
       }, 
       "ID": { 
       "type": "string" 
       }, 
       "IDF": { 
       "type": "string" 
       }, 
       "IDSUB": { 
       "type": "string" 
       }, 
       "LOCALEDATE": { 
       "type": "string" 
       }, 
       "MENSAJE": { 
       "type": "string" 
       }, 
       "TAMANYO": { 
       "type": "string" 
       }, 
       "TIPO": { 
       "type": "string" 
       }, 
       "VERSION": { 
       "type": "string" 
       } 
      } 
      }, 

... 

Но когда я пытаюсь это в коде с

Map mapping = elasticsearchTemplate.getMapping(ESBSDocumentEls.class); 

я могу получить только:

... (definition of metadata dynamic templates) 
metadata={type=object} 
... 

Как я могу получить подробное определение отображения с помощью ElasticSearchTemplate или другого класса Spring Data Elasticsearch?

спасибо!

ответ

1

Наконец-то я получил решение.

Вместо использования elasticSearchTemplate, я использовал ELS Java API:

GetMappingsResponse res = elasticSearchClient.admin().indices().getMappings(new GetMappingsRequest().indices(indexName)).get(); 
ImmutableOpenMap<String, MappingMetaData> indexMappings = res.mappings().get(indexName); 

MappingMetaData mappingMetaData = indexMappings.get(mappingType); 

Map<String, Object> map = mappingMetaData.getSourceAsMap(); 
Map<String, Object> metadataProperties = (Map<String, Object>) ((Map<String, Object>) map.get("properties")).get("metadata"); 
Map<String, Object> metadataList = (Map<String, Object>) metadataProperties.get("properties"); 

Таким образом я могу получить карту со всеми моими полями «метаданных». Вы не можете получить клиент апи из elasticSearchTemplate (https://jira.spring.io/browse/DATAES-124), так что вы должны вводить его :(

Я надеюсь, что это кому-то помочь!

0

Теперь вы можете использовать public <T> Map getMapping(Class<T> clazz) метод, который уже доступен в шаблоне Он возвращает карту полей и типов.

elasticSearchTemplate.getMapping(ESBSDocumentEls.class);