public FieldContext(String field, QueryBuildingContext queryContext) { this.field = field; this.fieldCustomizer = new QueryCustomizer(); isIdField = queryContext.getDocumentBuilder().getIdFieldName().equals( field ); }
public FieldContext(String field, QueryBuildingContext queryContext) { this.field = field; this.fieldCustomizer = new QueryCustomizer(); isIdField = queryContext.getDocumentBuilder().getIdFieldName().equals( field ); }
private void deleteWithoutTenant(LuceneWork work, IndexWriterDelegate delegate, DocumentBuilderIndexedEntity builder, Serializable id) throws IOException { if ( isIdNumeric( builder ) ) { delegate.deleteDocuments( NumericFieldUtils.createExactMatchQuery( builder.getIdFieldName(), id ) ); } else { Term idTerm = new Term( builder.getIdFieldName(), work.getIdInString() ); //The point to this class is to avoid using a Query to perform the delete operation! delegate.deleteDocuments( idTerm ); } }
private Builder(ElasticsearchQueryFactory queryFactory, Map<String, EntityIndexBinding> targetedEntityBindingsByName) { this.queryFactory = queryFactory; this.targetedEntityBindingsByName = targetedEntityBindingsByName; /* * IDs are always projected: always initialize their projections regardless of the * "projectedFields" attribute. */ for ( EntityIndexBinding binding : targetedEntityBindingsByName.values() ) { DocumentBuilderIndexedEntity documentBuilder = binding.getDocumentBuilder(); String idFieldName = documentBuilder.getIdFieldName(); TypeMetadata typeMetadata = documentBuilder.getTypeMetadata(); FieldProjection projection = createProjection( typeMetadata, idFieldName ); idProjectionByEntityBinding.put( binding, projection ); } }
private void deleteWithoutTenant(LuceneWork work, IndexWriterDelegate delegate, DocumentBuilderIndexedEntity builder, Serializable id) throws IOException { if ( isIdNumeric( builder ) ) { delegate.deleteDocuments( NumericFieldUtils.createExactMatchQuery( builder.getIdFieldName(), id ) ); } else { Term idTerm = new Term( builder.getIdFieldName(), work.getIdInString() ); //The point to this class is to avoid using a Query to perform the delete operation! delegate.deleteDocuments( idTerm ); } }
private Builder(ElasticsearchQueryFactory queryFactory, Map<String, EntityIndexBinding> targetedEntityBindingsByName) { this.queryFactory = queryFactory; this.targetedEntityBindingsByName = targetedEntityBindingsByName; /* * IDs are always projected: always initialize their projections regardless of the * "projectedFields" attribute. */ for ( EntityIndexBinding binding : targetedEntityBindingsByName.values() ) { DocumentBuilderIndexedEntity documentBuilder = binding.getDocumentBuilder(); String idFieldName = documentBuilder.getIdFieldName(); TypeMetadata typeMetadata = documentBuilder.getTypeMetadata(); FieldProjection projection = createProjection( typeMetadata, idFieldName ); idProjectionByEntityBinding.put( binding, projection ); } }
private void deleteWithTenant(LuceneWork work, IndexWriterDelegate delegate, final String tenantId, DocumentBuilderIndexedEntity builder, Serializable id) throws IOException { BooleanQuery.Builder termDeleteQueryBuilder = new BooleanQuery.Builder(); TermQuery tenantTermQuery = new TermQuery( new Term( DocumentBuilderIndexedEntity.TENANT_ID_FIELDNAME, tenantId ) ); termDeleteQueryBuilder.add( tenantTermQuery, Occur.FILTER ); if ( isIdNumeric( builder ) ) { Query exactMatchQuery = NumericFieldUtils.createExactMatchQuery( builder.getIdFieldName(), id ); termDeleteQueryBuilder.add( exactMatchQuery, Occur.FILTER ); } else { Term idTerm = new Term( builder.getIdFieldName(), work.getIdInString() ); termDeleteQueryBuilder.add( new TermQuery( idTerm ), Occur.FILTER ); } BooleanQuery termDeleteQuery = termDeleteQueryBuilder.build(); delegate.deleteDocuments( termDeleteQuery ); }
private void deleteWithTenant(LuceneWork work, IndexWriterDelegate delegate, final String tenantId, DocumentBuilderIndexedEntity builder, Serializable id) throws IOException { BooleanQuery.Builder termDeleteQueryBuilder = new BooleanQuery.Builder(); TermQuery tenantTermQuery = new TermQuery( new Term( DocumentBuilderIndexedEntity.TENANT_ID_FIELDNAME, tenantId ) ); termDeleteQueryBuilder.add( tenantTermQuery, Occur.FILTER ); if ( isIdNumeric( builder ) ) { Query exactMatchQuery = NumericFieldUtils.createExactMatchQuery( builder.getIdFieldName(), id ); termDeleteQueryBuilder.add( exactMatchQuery, Occur.FILTER ); } else { Term idTerm = new Term( builder.getIdFieldName(), work.getIdInString() ); termDeleteQueryBuilder.add( new TermQuery( idTerm ), Occur.FILTER ); } BooleanQuery termDeleteQuery = termDeleteQueryBuilder.build(); delegate.deleteDocuments( termDeleteQuery ); }
private String objectIdInString(IndexedTypeIdentifier typeKey, Serializable id, ConversionContext conversionContext) { EntityIndexBinding indexBindingForEntity = typesRegistry.get( typeKey ); if ( indexBindingForEntity == null ) { throw new SearchException( "Unable to find entity type metadata while deserializing: " + typeKey.getName() ); } DocumentBuilderIndexedEntity documentBuilder = indexBindingForEntity.getDocumentBuilder(); return documentBuilder.objectToString( documentBuilder.getIdFieldName(), id, conversionContext ); }
@Override public void performWork(LuceneWork work, IndexWriterDelegate delegate, IndexingMonitor monitor) { checkType( work ); Serializable id = work.getId(); log.tracef( "Removing %s#%s by id using an IndexWriter.", managedType, id ); try { if ( idIsNumeric ) { delegate.deleteDocuments( NumericFieldUtils.createExactMatchQuery( builder.getIdFieldName(), id ) ); } else { Term idTerm = new Term( builder.getIdFieldName(), work.getIdInString() ); delegate.deleteDocuments( idTerm ); } workspace.notifyWorkApplied( work ); } catch (Exception e) { String message = "Unable to remove " + managedType + "#" + id + " from index."; throw new SearchException( message, e ); } }
public static Object[] getDocumentFields(DocumentBuilderIndexedEntity builderIndexedEntity, Document document, String[] fields, ConversionContext conversionContext) { final int fieldNbr = fields.length; Object[] result = new Object[fieldNbr]; Arrays.fill( result, NOT_SET ); conversionContext.setConvertedTypeId( builderIndexedEntity.getTypeIdentifier() ); if ( builderIndexedEntity.getIdFieldName() != null ) { final String fieldName = builderIndexedEntity.getIdFieldName(); int matchingPosition = getFieldPosition( fields, fieldName ); if ( matchingPosition != -1 ) { conversionContext.pushProperty( fieldName ); try { populateResult( fieldName, builderIndexedEntity.getIdBridge(), Store.YES, result, document, conversionContext, matchingPosition ); } finally { conversionContext.popProperty(); } } } processFieldsForProjection( builderIndexedEntity, fields, result, document, conversionContext ); return result; }
private String objectIdInString(IndexedTypeIdentifier typeKey, Serializable id, ConversionContext conversionContext) { EntityIndexBinding indexBindingForEntity = typesRegistry.get( typeKey ); if ( indexBindingForEntity == null ) { throw new SearchException( "Unable to find entity type metadata while deserializing: " + typeKey.getName() ); } DocumentBuilderIndexedEntity documentBuilder = indexBindingForEntity.getDocumentBuilder(); return documentBuilder.objectToString( documentBuilder.getIdFieldName(), id, conversionContext ); }
@Override public void performWork(LuceneWork work, IndexWriterDelegate delegate, IndexingMonitor monitor) { checkType( work ); Serializable id = work.getId(); log.tracef( "Removing %s#%s by id using an IndexWriter.", managedType, id ); try { if ( idIsNumeric ) { delegate.deleteDocuments( NumericFieldUtils.createExactMatchQuery( builder.getIdFieldName(), id ) ); } else { Term idTerm = new Term( builder.getIdFieldName(), work.getIdInString() ); delegate.deleteDocuments( idTerm ); } workspace.notifyWorkApplied( work ); } catch (Exception e) { String message = "Unable to remove " + managedType + "#" + id + " from index."; throw new SearchException( message, e ); } }
public String objectToString(String fieldName, Object value, ConversionContext conversionContext) { if ( fieldName == null ) { throw new AssertionFailure( "Field name should not be null" ); } final FieldBridge bridge = fieldName.equals( getIdFieldName() ) ? getIdBridge() : getBridge( getTypeMetadata(), fieldName ); if ( bridge != null ) { return objectToString( fieldName, bridge, value, conversionContext ); } throw new SearchException( "Unable to find field " + fieldName + " in " + getTypeIdentifier().getName() ); }
public String objectToString(String fieldName, Object value, ConversionContext conversionContext) { if ( fieldName == null ) { throw new AssertionFailure( "Field name should not be null" ); } final FieldBridge bridge = fieldName.equals( getIdFieldName() ) ? getIdBridge() : getBridge( getTypeMetadata(), fieldName ); if ( bridge != null ) { return objectToString( fieldName, bridge, value, conversionContext ); } throw new SearchException( "Unable to find field " + fieldName + " in " + getTypeIdentifier().getName() ); }
@Override public void performWork(LuceneWork work, IndexWriterDelegate delegate, IndexingMonitor monitor) { final IndexedTypeIdentifier entityType = work.getEntityType(); final Serializable id = work.getId(); log.tracef( "Removing %s#%s by query.", entityType, id ); DocumentBuilderIndexedEntity builder = workspace.getDocumentBuilder( entityType ); BooleanQuery.Builder entityDeletionQueryBuilder = new BooleanQuery.Builder(); Query idQueryTerm; if ( isIdNumeric( builder ) ) { idQueryTerm = NumericFieldUtils.createExactMatchQuery( builder.getIdFieldName(), id ); } else { Term idTerm = new Term( builder.getIdFieldName(), work.getIdInString() ); idQueryTerm = new TermQuery( idTerm ); } entityDeletionQueryBuilder.add( idQueryTerm, BooleanClause.Occur.FILTER ); Term classNameQueryTerm = new Term( ProjectionConstants.OBJECT_CLASS, entityType.getName() ); TermQuery classNameQuery = new TermQuery( classNameQueryTerm ); entityDeletionQueryBuilder.add( classNameQuery, BooleanClause.Occur.FILTER ); addTenantQueryTerm( work.getTenantId(), entityDeletionQueryBuilder ); try { BooleanQuery entityDeletionQuery = entityDeletionQueryBuilder.build(); delegate.deleteDocuments( entityDeletionQuery ); } catch (Exception e) { String message = "Unable to remove " + entityType + "#" + id + " from index."; throw new SearchException( message, e ); } workspace.notifyWorkApplied( work ); }
public static Serializable getDocumentId(DocumentBuilderIndexedEntity builderIndexedEntity, Document document, ConversionContext conversionContext) { final TwoWayFieldBridge fieldBridge = builderIndexedEntity.getIdBridge(); final String fieldName = builderIndexedEntity.getIdFieldName(); try { return (Serializable) conversionContext .setConvertedTypeId( builderIndexedEntity.getTypeIdentifier() ) .pushIdentifierProperty() .twoWayConversionContext( fieldBridge ) .get( fieldName, document ); } finally { conversionContext.popProperty(); } }
public static Serializable getDocumentId(DocumentBuilderIndexedEntity builderIndexedEntity, Document document, ConversionContext conversionContext) { final TwoWayFieldBridge fieldBridge = builderIndexedEntity.getIdBridge(); final String fieldName = builderIndexedEntity.getIdFieldName(); try { return (Serializable) conversionContext .setConvertedTypeId( builderIndexedEntity.getTypeIdentifier() ) .pushIdentifierProperty() .twoWayConversionContext( fieldBridge ) .get( fieldName, document ); } finally { conversionContext.popProperty(); } }
@Override public void performWork(LuceneWork work, IndexWriterDelegate delegate, IndexingMonitor monitor) { checkType( work ); final Serializable id = work.getId(); try { if ( idIsNumeric ) { log.tracef( "Deleting %s#%s by query using an IndexWriter#updateDocument as id is Numeric", managedType, id ); delegate.deleteDocuments( NumericFieldUtils.createExactMatchQuery( builder.getIdFieldName(), id ) ); // no need to log the Add operation as we'll log in the delegate this.addDelegate.performWork( work, delegate, monitor ); } else { log.tracef( "Updating %s#%s by id using an IndexWriter#updateDocument.", managedType, id ); Term idTerm = new Term( builder.getIdFieldName(), work.getIdInString() ); Map<String, String> fieldToAnalyzerMap = work.getFieldToAnalyzerMap(); ScopedAnalyzerReference analyzerReference = builder.getAnalyzerReference(); analyzerReference = AddWorkExecutor.updateAnalyzerMappings( workspace, analyzerReference, fieldToAnalyzerMap ); delegate.updateDocument( idTerm, work.getDocument(), analyzerReference ); } workspace.notifyWorkApplied( work ); } catch (Exception e) { String message = "Unable to update " + managedType + "#" + id + " in index."; throw new SearchException( message, e ); } if ( monitor != null ) { monitor.documentsAdded( 1L ); } }
@Override public void performWork(LuceneWork work, IndexWriterDelegate delegate, IndexingMonitor monitor) { checkType( work ); final Serializable id = work.getId(); try { if ( idIsNumeric ) { log.tracef( "Deleting %s#%s by query using an IndexWriter#updateDocument as id is Numeric", managedType, id ); delegate.deleteDocuments( NumericFieldUtils.createExactMatchQuery( builder.getIdFieldName(), id ) ); // no need to log the Add operation as we'll log in the delegate this.addDelegate.performWork( work, delegate, monitor ); } else { log.tracef( "Updating %s#%s by id using an IndexWriter#updateDocument.", managedType, id ); Term idTerm = new Term( builder.getIdFieldName(), work.getIdInString() ); Map<String, String> fieldToAnalyzerMap = work.getFieldToAnalyzerMap(); ScopedAnalyzerReference analyzerReference = builder.getAnalyzerReference(); analyzerReference = AddWorkExecutor.updateAnalyzerMappings( workspace, analyzerReference, fieldToAnalyzerMap ); delegate.updateDocument( idTerm, work.getDocument(), analyzerReference ); } workspace.notifyWorkApplied( work ); } catch (Exception e) { String message = "Unable to update " + managedType + "#" + id + " in index."; throw new SearchException( message, e ); } if ( monitor != null ) { monitor.documentsAdded( 1l ); } }