@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); }
@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()); } }
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; }
itemQueryBuilder = createQueryBuilderForSimpleWhere(childItems, item.getLogicalOperator()); if (itemQueryBuilder == null) { itemQueryBuilder = getMissingQuery(fieldName); } else { itemQueryBuilder = QueryBuilders.termQuery(fieldName, operand); itemQueryBuilder = getExistsQuery(fieldName); } else { itemQueryBuilder = QueryBuilders.boolQuery().mustNot(QueryBuilders.termQuery(fieldName,
@Override public Table execute() throws MetaModelException { final MutableTable table = getTable(); final Map<String, ?> source = ElasticSearchUtils.getMappingSource(table); final ElasticSearchDataContext dataContext = getUpdateCallback().getDataContext(); final IndicesAdminClient indicesAdmin = dataContext.getElasticSearchClient().admin().indices(); final String indexName = dataContext.getIndexName(); final PutMappingRequestBuilder requestBuilder = new PutMappingRequestBuilder(indicesAdmin, PutMappingAction.INSTANCE).setIndices(indexName) .setType(table.getName()); requestBuilder.setSource(source); final PutMappingResponse result = requestBuilder.execute().actionGet(); logger.debug("PutMapping response: acknowledged={}", result.isAcknowledged()); dataContext.getElasticSearchClient().admin().indices().prepareRefresh(indexName).get(); final MutableSchema schema = (MutableSchema) getSchema(); schema.addTable(table); return table; }
@Override public void execute() throws MetaModelException { final ElasticSearchRestUpdateCallback updateCallback = getUpdateCallback(); final ElasticSearchRestDataContext dataContext = updateCallback.getDataContext(); final String indexName = dataContext.getIndexName(); final String documentType = getTable().getName(); final Map<String, Object> source = new HashMap<>(); final Column[] columns = getColumns(); final Object[] values = getValues(); String id = null; for (int i = 0; i < columns.length; i++) { if (isSet(columns[i])) { final String columnName = columns[i].getName(); final Object value = values[i]; if (ElasticSearchUtils.FIELD_ID.equals(columnName)) { if (value != null) { id = value.toString(); } } else { final String fieldName = ElasticSearchUtils.getValidatedFieldName(columnName); source.put(fieldName, value); } } } assert !source.isEmpty(); IndexRequest indexRequest = new IndexRequest(indexName, documentType, id); indexRequest.source(source); getUpdateCallback().execute(indexRequest); }
private static ColumnType getColumnTypeFromMetadataField(Map<String, ?> fieldMetadata) { final String metaDataFieldType = getMetaDataFieldTypeFromMetaDataField(fieldMetadata); if (metaDataFieldType == null) { return ColumnType.STRING; } return ElasticSearchUtils.getColumnTypeFromElasticSearchType(metaDataFieldType); }
itemQueryBuilder = createQueryBuilderForSimpleWhere(childItems, item.getLogicalOperator()); if (itemQueryBuilder == null) { itemQueryBuilder = getMissingQuery(fieldName); } else { itemQueryBuilder = QueryBuilders.termQuery(fieldName, operand); itemQueryBuilder = getExistsQuery(fieldName); } else { itemQueryBuilder = QueryBuilders.boolQuery().mustNot(QueryBuilders.termQuery(fieldName,
@Override public Table execute() throws MetaModelException { final MutableTable table = getTable(); final Map<String, ?> source = ElasticSearchUtils.getMappingSource(table); final ElasticSearchDataContext dataContext = getUpdateCallback().getDataContext(); final IndicesAdminClient indicesAdmin = dataContext.getElasticSearchClient().admin().indices(); final String indexName = dataContext.getIndexName(); final PutMappingRequestBuilder requestBuilder = new PutMappingRequestBuilder(indicesAdmin, PutMappingAction.INSTANCE).setIndices(indexName) .setType(table.getName()); requestBuilder.setSource(source); final PutMappingResponse result = requestBuilder.execute().actionGet(); logger.debug("PutMapping response: acknowledged={}", result.isAcknowledged()); dataContext.getElasticSearchClient().admin().indices().prepareRefresh(indexName).get(); final MutableSchema schema = (MutableSchema) getSchema(); schema.addTable(table); return table; }
private static ColumnType getColumnTypeFromMetadataField(Map<String, ?> fieldMetadata) { final String metaDataFieldType = getMetaDataFieldTypeFromMetaDataField(fieldMetadata); if (metaDataFieldType == null) { return ColumnType.STRING; } return ElasticSearchUtils.getColumnTypeFromElasticSearchType(metaDataFieldType); }
@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); }
@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()); } }
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; }
final QueryBuilder queryBuilder = ElasticSearchUtils.createQueryBuilderForSimpleWhere(whereItems, LogicalOperator.AND); if (queryBuilder == null) {
@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); }
final QueryBuilder queryBuilder = ElasticSearchUtils.createQueryBuilderForSimpleWhere(whereItems, LogicalOperator.AND); if (queryBuilder == null) {
@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 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); } }