@Override public ElasticsearchWork<?> visitDeleteByQueryWork(DeleteByQueryLuceneWork work, IndexingMonitor monitor) { JsonObject convertedQuery = ToElasticsearch.fromDeletionQuery( searchIntegrator.getIndexBinding( work.getEntityType() ).getDocumentBuilder(), work.getDeletionQuery() ); URLEncodedString typeName = URLEncodedString.fromString( work.getEntityType().getName() ); JsonObject payload = createDeleteByQueryPayload( convertedQuery, work.getTenantId() ); return workFactory.deleteByQuery( indexName, payload ) .luceneWork( work ) .type( typeName ) .markIndexDirty( refreshAfterWrite ) .build(); }
@Override public void addDeleteByQueryLuceneWork(String entityClassName, DeletionQuery deletionQuery) { final IndexedTypeIdentifier fromName = typesRegistry.keyFromName( entityClassName ); LuceneWork result = new DeleteByQueryLuceneWork( fromName, deletionQuery ); this.results.add( result ); }
private static void assertDeleteByQuery(DeleteByQueryLuceneWork work, DeleteByQueryLuceneWork copy) { assertThat( work.getEntityType() ).as( "DeleteByQuery.getEntityClass is not copied" ).isEqualTo( copy.getEntityType() ); assertThat( work.getDeletionQuery() ).as( "DeleteByQuery.getDeletionQuery is not copied" ).isEqualTo( copy.getDeletionQuery() ); }
@Override public void performWork(LuceneWork work, IndexWriterDelegate delegate, IndexingMonitor monitor) { DeleteByQueryLuceneWork deleteWork = (DeleteByQueryLuceneWork) work; final IndexedTypeIdentifier entityType = work.getEntityType(); final DeletionQuery query = deleteWork.getDeletionQuery(); if ( log.isTraceEnabled() ) { log.tracef( "Removing all %s matching Query: %s", entityType.toString(), query.toString() ); } BooleanQuery.Builder entityDeletionQueryBuilder = new BooleanQuery.Builder(); { Query queryToDelete = query.toLuceneQuery( this.workspace.getDocumentBuilder( entityType ) ); entityDeletionQueryBuilder.add( queryToDelete, 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 { delegate.deleteDocuments( entityDeletionQueryBuilder.build() ); } catch (IOException e) { SearchException ex = log.unableToDeleteByQuery( entityType, query, e ); throw ex; } this.workspace.notifyWorkApplied( work ); }
@Override public BackendRequest<?> visitDeleteByQueryWork(DeleteByQueryLuceneWork work, Boolean refresh) { JsonObject convertedQuery = ToElasticsearch.fromDeletionQuery( searchIntegrator.getIndexBinding( work.getEntityClass() ).getDocumentBuilder(), work.getDeletionQuery() ); String type = work.getEntityClass().getName(); if ( work.getTenantId() != null ) { query = JsonBuilder.object() .add( "query", JsonBuilder.object() .add( "filter", JsonBuilder.object() .add( "term", JsonBuilder.object() .addProperty( DocumentBuilderIndexedEntity.TENANT_ID_FIELDNAME, work.getTenantId() )
@Override public String toString() { return "DeleteByQueryLuceneWork: " + this.getEntityType().getName() + ": " + this.deletionQuery.toString(); }
@Override public void performWork(LuceneWork work, IndexWriterDelegate delegate, IndexingMonitor monitor) { DeleteByQueryLuceneWork deleteWork = (DeleteByQueryLuceneWork) work; final IndexedTypeIdentifier entityType = work.getEntityType(); final DeletionQuery query = deleteWork.getDeletionQuery(); if ( log.isTraceEnabled() ) { log.tracef( "Removing all %s matching Query: %s", entityType.toString(), query.toString() ); } BooleanQuery.Builder entityDeletionQueryBuilder = new BooleanQuery.Builder(); { Query queryToDelete = query.toLuceneQuery( this.workspace.getDocumentBuilder( entityType ) ); entityDeletionQueryBuilder.add( queryToDelete, 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 { delegate.deleteDocuments( entityDeletionQueryBuilder.build() ); } catch (IOException e) { SearchException ex = log.unableToDeleteByQuery( entityType, query, e ); throw ex; } this.workspace.notifyWorkApplied( work ); }
@Override public String toString() { return "DeleteByQueryLuceneWork: " + this.getEntityType().getName() + ": " + this.deletionQuery.toString(); }
@Override public ElasticsearchWork<?> visitDeleteByQueryWork(DeleteByQueryLuceneWork work, IndexingMonitor monitor) { JsonObject convertedQuery = ToElasticsearch.fromDeletionQuery( searchIntegrator.getIndexBinding( work.getEntityType() ).getDocumentBuilder(), work.getDeletionQuery() ); URLEncodedString typeName = URLEncodedString.fromString( work.getEntityType().getName() ); JsonObject payload = createDeleteByQueryPayload( convertedQuery, work.getTenantId() ); return workFactory.deleteByQuery( indexName, payload ) .luceneWork( work ) .type( typeName ) .markIndexDirty( refreshAfterWrite ) .build(); }
serializer.addDeleteByQuery( work.getEntityType().getName(), ( (DeleteByQueryLuceneWork) work ).getDeletionQuery() );
@Override public void addDeleteByQueryLuceneWork(String entityClassName, DeletionQuery deletionQuery) { final IndexedTypeIdentifier fromName = typesRegistry.keyFromName( entityClassName ); LuceneWork result = new DeleteByQueryLuceneWork( fromName, deletionQuery ); this.results.add( result ); }
serializer.addDeleteByQuery( work.getEntityType().getName(), ( (DeleteByQueryLuceneWork) work ).getDeletionQuery() );
/** * Enqueues all work needed to be performed according to current state into * the LuceneWork queue. * * @param luceneQueue work will be appended to this list */ public void enqueueLuceneWork(List<LuceneWork> luceneQueue) { final Set<Entry<Serializable, PerEntityWork>> entityInstances = entityById.entrySet(); final ConversionContext conversionContext = new ContextualExceptionBridgeHelper(); if ( purgeAll ) { luceneQueue.add( new PurgeAllLuceneWork( tenantId, typeIdentifier ) ); } for ( DeletionQuery delQuery : this.deletionQueries ) { luceneQueue.add( new DeleteByQueryLuceneWork( tenantId, typeIdentifier, delQuery ) ); } for ( Entry<Serializable, PerEntityWork> entry : entityInstances ) { Serializable indexingId = entry.getKey(); PerEntityWork perEntityWork = entry.getValue(); String tenantIdentifier = perEntityWork.getTenantIdentifier(); perEntityWork.enqueueLuceneWork( tenantIdentifier, typeIdentifier, indexingId, documentBuilder, luceneQueue, conversionContext ); } }
/** * Enqueues all work needed to be performed according to current state into * the LuceneWork queue. * * @param luceneQueue work will be appended to this list */ public void enqueueLuceneWork(List<LuceneWork> luceneQueue) { final Set<Entry<Serializable, PerEntityWork>> entityInstances = entityById.entrySet(); final ConversionContext conversionContext = new ContextualExceptionBridgeHelper(); if ( purgeAll ) { luceneQueue.add( new PurgeAllLuceneWork( tenantId, typeIdentifier ) ); } for ( DeletionQuery delQuery : this.deletionQueries ) { luceneQueue.add( new DeleteByQueryLuceneWork( tenantId, typeIdentifier, delQuery ) ); } for ( Entry<Serializable, PerEntityWork> entry : entityInstances ) { Serializable indexingId = entry.getKey(); PerEntityWork perEntityWork = entry.getValue(); String tenantIdentifier = perEntityWork.getTenantIdentifier(); perEntityWork.enqueueLuceneWork( tenantIdentifier, typeIdentifier, indexingId, documentBuilder, luceneQueue, conversionContext ); } }
private List<LuceneWork> buildLuceneWorkList() throws Exception { List<LuceneWork> works = new ArrayList<LuceneWork>(); works.add( OptimizeLuceneWork.INSTANCE ); works.add( OptimizeLuceneWork.INSTANCE ); works.add( new OptimizeLuceneWork( remoteTypeId ) ); //won't be send over works.add( new PurgeAllLuceneWork( remoteTypeId ) ); works.add( new PurgeAllLuceneWork( remoteTypeId ) ); works.add( new DeleteByQueryLuceneWork( remoteTypeId, new SingularTermDeletionQuery( "key", "value" ) ) ); works.add( new DeleteLuceneWork( 123L, "123", remoteTypeId ) ); works.add( new DeleteLuceneWork( "Sissi", "Sissi", remoteTypeId ) ); works.add( new DeleteLuceneWork( new URL( "http://emmanuelbernard.com" ), "http://emmanuelbernard.com", remoteTypeId ) ); Document doc = buildDocumentWithNumericFields(); Map<String, String> analyzers = new HashMap<String, String>(); analyzers.put( "godo", "ngram" ); works.add( new AddLuceneWork( 123, "123", remoteTypeId, doc, analyzers ) ); doc = buildDocumentWithMultipleMixedTypeFields(); works.add( new UpdateLuceneWork( 1234, "1234", remoteTypeId, doc ) ); works.add( new AddLuceneWork( 125, "125", remoteTypeId, new Document() ) ); return works; }
DeleteByQueryLuceneWork work = new DeleteByQueryLuceneWork( tshirtType, new SingularTermDeletionQuery( "logo", "jboss" ) ); List<LuceneWork> l = new ArrayList<>(); l.add( work );