private static ColumnType getColumnTypeFromMetadataField(Map<String, ?> fieldMetadata) { final String metaDataFieldType = getMetaDataFieldTypeFromMetaDataField(fieldMetadata); if (metaDataFieldType == null) { return ColumnType.STRING; } return ElasticSearchUtils.getColumnTypeFromElasticSearchType(metaDataFieldType); }
/** * Performs an analysis of an available metadata properties/mapping * for a particula document type. * * @param metadataProperties * the ElasticSearch mapping * @param documentType * the name of the index type * @return a table definition for ElasticSearch. */ private static SimpleTableDef detectTable(final Map<String, Object> metadataProperties, final String documentType) { final ElasticSearchMetaData metaData = ElasticSearchMetaDataParser.parse(metadataProperties); return new SimpleTableDef(documentType, metaData.getColumnNames(), metaData.getColumnTypes()); }
/** * Parses the ElasticSearch meta data info into an ElasticSearchMetaData * object. This method makes much easier to create the ElasticSearch schema. * * @param metaDataInfo * ElasticSearch mapping metadata in Map format * @return An ElasticSearchMetaData object */ public static ElasticSearchMetaData parse(Map<String, ?> metaDataInfo) { final String[] fieldNames = new String[metaDataInfo.size() + 1]; final ColumnType[] columnTypes = new ColumnType[metaDataInfo.size() + 1]; // add the document ID field (fixed) fieldNames[0] = ElasticSearchUtils.FIELD_ID; columnTypes[0] = ColumnType.STRING; int i = 1; for (Entry<String, ?> metaDataField : metaDataInfo.entrySet()) { @SuppressWarnings("unchecked") final Map<String, ?> fieldMetadata = (Map<String, ?>) metaDataField.getValue(); fieldNames[i] = metaDataField.getKey(); columnTypes[i] = getColumnTypeFromMetadataField(fieldMetadata); i++; } return new ElasticSearchMetaData(fieldNames, columnTypes); }
@Override public Row getRow() { if (_currentHit == null) { return null; } final Map<String, Object> source = _currentHit.getSource(); final String documentId = _currentHit.getId(); return ElasticSearchUtils.createRow(source, documentId, getHeader()); } }
@Override protected DataSet materializeMainSchemaTable(Table table, List<SelectItem> selectItems, List<FilterItem> whereItems, int firstRow, int maxRows) { final QueryBuilder queryBuilder = ElasticSearchUtils.createQueryBuilderForSimpleWhere(whereItems, LogicalOperator.AND); if (queryBuilder != null) { // where clause can be pushed down to an ElasticSearch query final SearchRequestBuilder searchRequest = createSearchRequest(table, firstRow, maxRows, queryBuilder); final SearchResponse response = searchRequest.execute().actionGet(); return new ElasticSearchDataSet(getElasticSearchClient(), response, selectItems); } return super.materializeMainSchemaTable(table, selectItems, whereItems, firstRow, maxRows); }
public static Map<String, ?> getMappingSource(final MutableTable table) { if (table.getColumnByName(FIELD_ID) == null) { final MutableColumn idColumn = new MutableColumn(FIELD_ID, ColumnType.STRING).setTable(table).setPrimaryKey( true); table.addColumn(0, idColumn); } final Map<String, Map<String, String>> propertiesMap = new LinkedHashMap<>(); for (Column column : table.getColumns()) { final String columnName = column.getName(); if (FIELD_ID.equals(columnName)) { // do nothing - the ID is a client-side construct continue; } final String fieldName = getValidatedFieldName(columnName); final Map<String, String> propertyMap = new HashMap<>(); final String type = getType(column); propertyMap.put("type", type); propertiesMap.put(fieldName, propertyMap); } HashMap<String, Map<String, Map<String, String>>> docTypeMap = new HashMap<>(); docTypeMap.put("properties", propertiesMap); final Map<String, Map<String, Map<String, Map<String, String>>>> mapping = new HashMap<>(); mapping.put(table.getName(), docTypeMap); return mapping; }
@Override public Table execute() throws MetaModelException { final MutableTable table = getTable(); final Map<String, ?> source = ElasticSearchUtils.getMappingSource(table); final ElasticSearchRestDataContext dataContext = getUpdateCallback().getDataContext(); final String indexName = dataContext.getIndexName(); final PutMappingRequest putMapping = new PutMappingRequest(indexName).type(table.getName()).source(source); getUpdateCallback().execute(putMapping); final MutableSchema schema = (MutableSchema) getSchema(); schema.addTable(table); return table; }
Date valueToDate = ElasticSearchDateConverter.tryToConvert((String) value); if (valueToDate == null) { values[i] = value;
@SuppressWarnings("unchecked") final Map<String, ?> metadataPropertiesMap = (Map<String, ?>) metadataProperties; final ElasticSearchMetaData metaData = ElasticSearchMetaDataParser.parse(metadataPropertiesMap); final SimpleTableDef std = new SimpleTableDef(documentType, metaData.getColumnNames(), metaData.getColumnTypes()); return std;
@Override public Row getRow() { if (_currentHit == null) { return null; } final Map<String, Object> source = _currentHit.getSource(); final String documentId = _currentHit.getId(); return ElasticSearchUtils.createRow(source, documentId, getHeader()); } }
@Override protected DataSet materializeMainSchemaTable(Table table, List<SelectItem> selectItems, List<FilterItem> whereItems, int firstRow, int maxRows) { final QueryBuilder queryBuilder = ElasticSearchUtils.createQueryBuilderForSimpleWhere(whereItems, LogicalOperator.AND); if (queryBuilder != null) { // where clause can be pushed down to an ElasticSearch query final SearchRequestBuilder searchRequest = createSearchRequest(table, firstRow, maxRows, queryBuilder); final SearchResponse response = searchRequest.execute().actionGet(); return new ElasticSearchDataSet(getElasticSearchClient(), response, selectItems); } return super.materializeMainSchemaTable(table, selectItems, whereItems, firstRow, maxRows); }
public static Map<String, ?> getMappingSource(final MutableTable table) { if (table.getColumnByName(FIELD_ID) == null) { final MutableColumn idColumn = new MutableColumn(FIELD_ID, ColumnType.STRING).setTable(table).setPrimaryKey( true); table.addColumn(0, idColumn); } final Map<String, Map<String, String>> propertiesMap = new LinkedHashMap<>(); for (Column column : table.getColumns()) { final String columnName = column.getName(); if (FIELD_ID.equals(columnName)) { // do nothing - the ID is a client-side construct continue; } final String fieldName = getValidatedFieldName(columnName); final Map<String, String> propertyMap = new HashMap<>(); final String type = getType(column); propertyMap.put("type", type); propertiesMap.put(fieldName, propertyMap); } HashMap<String, Map<String, Map<String, String>>> docTypeMap = new HashMap<>(); docTypeMap.put("properties", propertiesMap); final Map<String, Map<String, Map<String, Map<String, String>>>> mapping = new HashMap<>(); mapping.put(table.getName(), docTypeMap); return mapping; }
private static ColumnType getColumnTypeFromMetadataField(Map<String, ?> fieldMetadata) { final String metaDataFieldType = getMetaDataFieldTypeFromMetaDataField(fieldMetadata); if (metaDataFieldType == null) { return ColumnType.STRING; } return ElasticSearchUtils.getColumnTypeFromElasticSearchType(metaDataFieldType); }
/** * Parses the ElasticSearch meta data info into an ElasticSearchMetaData * object. This method makes much easier to create the ElasticSearch schema. * * @param metaDataInfo * ElasticSearch mapping metadata in Map format * @return An ElasticSearchMetaData object */ public static ElasticSearchMetaData parse(Map<String, ?> metaDataInfo) { final String[] fieldNames = new String[metaDataInfo.size() + 1]; final ColumnType[] columnTypes = new ColumnType[metaDataInfo.size() + 1]; // add the document ID field (fixed) fieldNames[0] = ElasticSearchUtils.FIELD_ID; columnTypes[0] = ColumnType.STRING; int i = 1; for (Entry<String, ?> metaDataField : metaDataInfo.entrySet()) { @SuppressWarnings("unchecked") final Map<String, ?> fieldMetadata = (Map<String, ?>) metaDataField.getValue(); fieldNames[i] = metaDataField.getKey(); columnTypes[i] = getColumnTypeFromMetadataField(fieldMetadata); i++; } return new ElasticSearchMetaData(fieldNames, columnTypes); }
Date valueToDate = ElasticSearchDateConverter.tryToConvert((String) value); if (valueToDate == null) { values[i] = value;
@SuppressWarnings("unchecked") final Map<String, ?> metadataPropertiesMap = (Map<String, ?>) metadataProperties; final ElasticSearchMetaData metaData = ElasticSearchMetaDataParser.parse(metadataPropertiesMap); final SimpleTableDef std = new SimpleTableDef(documentType, metaData.getColumnNames(), metaData.getColumnTypes()); return std;
@Override protected Row executePrimaryKeyLookupQuery(Table table, List<SelectItem> selectItems, Column primaryKeyColumn, Object keyValue) { if (keyValue == null) { return null; } final String documentType = table.getName(); final String id = keyValue.toString(); final GetResponse response = getElasticSearchClient().prepareGet(indexName, documentType, id).execute().actionGet(); if (!response.isExists()) { return null; } final Map<String, Object> source = response.getSource(); final String documentId = response.getId(); final DataSetHeader header = new SimpleDataSetHeader(selectItems); return ElasticSearchUtils.createRow(source, documentId, header); }
@Override protected DataSet materializeMainSchemaTable(final Table table, final List<SelectItem> selectItems, final List<FilterItem> whereItems, final int firstRow, final int maxRows) { final QueryBuilder queryBuilder = ElasticSearchUtils.createQueryBuilderForSimpleWhere(whereItems, LogicalOperator.AND); if (queryBuilder != null) { // where clause can be pushed down to an ElasticSearch query SearchSourceBuilder searchSourceBuilder = createSearchRequest(firstRow, maxRows, queryBuilder); SearchResponse result = executeSearch(table, searchSourceBuilder, scrollNeeded(maxRows)); return new ElasticSearchRestDataSet(getElasticSearchClient(), result, selectItems); } return super.materializeMainSchemaTable(table, selectItems, whereItems, firstRow, maxRows); }
@Override protected Row executePrimaryKeyLookupQuery(Table table, List<SelectItem> selectItems, Column primaryKeyColumn, Object keyValue) { if (keyValue == null) { return null; } final String documentType = table.getName(); final String id = keyValue.toString(); final GetResponse response = getElasticSearchClient().prepareGet(indexName, documentType, id).execute().actionGet(); if (!response.isExists()) { return null; } final Map<String, Object> source = response.getSource(); final String documentId = response.getId(); final DataSetHeader header = new SimpleDataSetHeader(selectItems); return ElasticSearchUtils.createRow(source, documentId, header); }
@Override protected Row executePrimaryKeyLookupQuery(Table table, List<SelectItem> selectItems, Column primaryKeyColumn, Object keyValue) { if (keyValue == null) { return null; } final String documentType = table.getName(); final String id = keyValue.toString(); final DataSetHeader header = new SimpleDataSetHeader(selectItems); try { return ElasticSearchUtils.createRow(getElasticSearchClient() .get(new GetRequest(getIndexName(), documentType, id)) .getSource(), id, header); } catch (IOException e) { logger.warn("Could not execute ElasticSearch query", e); throw new MetaModelException("Could not execute ElasticSearch query", e); } }