public IndexWriterDelegate getIndexWriterDelegate() { IndexWriter indexWriter = getIndexWriter(); //This to respect the existing semantics of returning null on failure of IW opening if ( indexWriter != null ) { return new IndexWriterDelegate( indexWriter ); } else { return null; } }
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 ); } }
public void addDocument(final Document document, final ScopedAnalyzerReference analyzerReference) throws IOException { //This is now equivalent to the old "addDocument" method: updateDocument( null, document, analyzerReference ); }
@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) { final IndexedTypeIdentifier entityType = work.getEntityType(); log.tracef( "optimize Lucene index: %s", entityType ); workspace.performOptimization( delegate.getIndexWriter() ); }
@Override public void performWork(LuceneWork work, IndexWriterDelegate delegate, IndexingMonitor monitor) { final IndexedTypeIdentifier entityType = work.getEntityType(); DocumentBuilderIndexedEntity documentBuilder = workspace.getDocumentBuilder( entityType ); Map<String, String> fieldToAnalyzerMap = work.getFieldToAnalyzerMap(); ScopedAnalyzerReference analyzerReference = documentBuilder.getAnalyzerReference(); analyzerReference = updateAnalyzerMappings( workspace, analyzerReference, fieldToAnalyzerMap ); if ( log.isTraceEnabled() ) { log.trace( "add to Lucene index: " + entityType + "#" + work.getId() + ":" + work.getDocument() ); } try { delegate.addDocument( work.getDocument(), analyzerReference ); workspace.notifyWorkApplied( work ); } catch (IOException e) { throw new SearchException( "Unable to add to Lucene index: " + entityType + "#" + work.getId(), 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 ); } }
@Override public void performWork(LuceneWork work, IndexWriterDelegate delegate, IndexingMonitor monitor) { final IndexedTypeIdentifier entityType = work.getEntityType(); log.tracef( "optimize Lucene index: %s", entityType ); workspace.performOptimization( delegate.getIndexWriter() ); }
@Override public void performWork(LuceneWork work, IndexWriterDelegate delegate, IndexingMonitor monitor) { final IndexedTypeIdentifier entityType = work.getEntityType(); DocumentBuilderIndexedEntity documentBuilder = workspace.getDocumentBuilder( entityType ); Map<String, String> fieldToAnalyzerMap = work.getFieldToAnalyzerMap(); ScopedAnalyzerReference analyzerReference = documentBuilder.getAnalyzerReference(); analyzerReference = updateAnalyzerMappings( workspace, analyzerReference, fieldToAnalyzerMap ); if ( log.isTraceEnabled() ) { log.trace( "add to Lucene index: " + entityType + "#" + work.getId() + ":" + work.getDocument() ); } try { delegate.addDocument( work.getDocument(), analyzerReference ); workspace.notifyWorkApplied( work ); } catch (IOException e) { throw new SearchException( "Unable to add to Lucene index: " + entityType + "#" + work.getId(), e ); } if ( monitor != null ) { monitor.documentsAdded( 1l ); } }
deleteDocumentsQueryBuilder.add( tenantTermQuery, Occur.FILTER ); delegate.deleteDocuments( deleteDocumentsQueryBuilder.build() ); ScopedAnalyzerReference analyzerReference = builder.getAnalyzerReference(); analyzerReference = AddWorkExecutor.updateAnalyzerMappings( workspace, analyzerReference, fieldToAnalyzerMap ); delegate.updateDocument( idTerm, work.getDocument(), analyzerReference );
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 ); } }
public IndexWriterDelegate getIndexWriterDelegate(ErrorContextBuilder errorContextBuilder) { IndexWriter indexWriter = getIndexWriter( errorContextBuilder ); //This to respect the existing semantics of returning null on failure of IW opening if ( indexWriter != null ) { return new IndexWriterDelegate( indexWriter ); } else { return null; } }
public void addDocument(final Document document, final ScopedAnalyzerReference analyzerReference) throws IOException { //This is now equivalent to the old "addDocument" method: updateDocument( null, document, analyzerReference ); }
deleteDocumentsQueryBuilder.add( tenantTermQuery, Occur.FILTER ); delegate.deleteDocuments( deleteDocumentsQueryBuilder.build() ); ScopedAnalyzerReference analyzerReference = builder.getAnalyzerReference(); analyzerReference = AddWorkExecutor.updateAnalyzerMappings( workspace, analyzerReference, fieldToAnalyzerMap ); delegate.updateDocument( idTerm, work.getDocument(), analyzerReference );
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 ); }
public IndexWriterDelegate getIndexWriterDelegate(ErrorContextBuilder errorContextBuilder) { IndexWriter indexWriter = getIndexWriter( errorContextBuilder ); //This to respect the existing semantics of returning null on failure of IW opening if ( indexWriter != null ) { return new IndexWriterDelegate( indexWriter ); } else { return null; } }
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 ); }
public IndexWriterDelegate getIndexWriterDelegate() { IndexWriter indexWriter = getIndexWriter(); //This to respect the existing semantics of returning null on failure of IW opening if ( indexWriter != null ) { return new IndexWriterDelegate( indexWriter ); } else { return null; } }
@Override public void performWork(LuceneWork work, IndexWriterDelegate delegate, IndexingMonitor monitor) { final IndexedTypeIdentifier entityType = work.getEntityType(); final String tenantId = work.getTenantId(); try { Term entityTypeTerm = new Term( ProjectionConstants.OBJECT_CLASS, entityType.getName() ); if ( tenantId == null ) { log.tracef( "purgeAll Lucene index using IndexWriter for type: %s", entityType ); delegate.deleteDocuments( entityTypeTerm ); } else { log.tracef( "purgeAll Lucene index using IndexWriter for type $1%s and tenant $2%s", entityType, tenantId ); Term tenantIdTerm = tenantId == null ? null : new Term( DocumentBuilderIndexedEntity.TENANT_ID_FIELDNAME, tenantId ); BooleanQuery deleteDocumentsQuery = new BooleanQuery.Builder() .add( new TermQuery( entityTypeTerm ), Occur.FILTER ) .add( new TermQuery( tenantIdTerm ), Occur.FILTER ) .build(); delegate.deleteDocuments( deleteDocumentsQuery ); } } catch (Exception e) { throw new SearchException( "Unable to purge all from Lucene index: " + entityType, e ); } workspace.notifyWorkApplied( work ); } }
@Override public void performWork(LuceneWork work, IndexWriterDelegate delegate, IndexingMonitor monitor) { final IndexedTypeIdentifier entityType = work.getEntityType(); final String tenantId = work.getTenantId(); try { Term entityTypeTerm = new Term( ProjectionConstants.OBJECT_CLASS, entityType.getName() ); if ( tenantId == null ) { log.tracef( "purgeAll Lucene index using IndexWriter for type: %s", entityType ); delegate.deleteDocuments( entityTypeTerm ); } else { log.tracef( "purgeAll Lucene index using IndexWriter for type $1%s and tenant $2%s", entityType, tenantId ); Term tenantIdTerm = tenantId == null ? null : new Term( DocumentBuilderIndexedEntity.TENANT_ID_FIELDNAME, tenantId ); BooleanQuery deleteDocumentsQuery = new BooleanQuery.Builder() .add( new TermQuery( entityTypeTerm ), Occur.FILTER ) .add( new TermQuery( tenantIdTerm ), Occur.FILTER ) .build(); delegate.deleteDocuments( deleteDocumentsQuery ); } } catch (Exception e) { throw new SearchException( "Unable to purge all from Lucene index: " + entityType, e ); } workspace.notifyWorkApplied( work ); } }