private LuceneAnalysisDefinitionProvider getLuceneAnalyzerDefinitionProvider() { // Uses a Service so that integrators can inject alternative Lucene Analyzer definition providers try ( ServiceReference<LuceneAnalysisDefinitionSourceService> serviceRef = serviceManager.requestReference( LuceneAnalysisDefinitionSourceService.class ) ) { return serviceRef.get().getLuceneAnalyzerDefinitionProvider(); } }
@Override public <S extends Service> ServiceReference<S> requestReference(Class<S> serviceRole) { return new ServiceReference<>( this, serviceRole ); }
@Override public void destroy() { if ( indexManagementStrategy == IndexManagementStrategy.CREATE_DELETE ) { deleteIndexIfExisting(); } backend.close(); clientReference.close(); }
@Override public void initializeReferences(Collection<AnalyzerReference> analyzerReferences, Map<String, AnalyzerDef> mappingAnalyzerDefinitions, Collection<AnalyzerReference> normalizerReferences, Map<String, NormalizerDef> mappingNormalizerDefinitions) { try ( ServiceReference<ElasticsearchAnalyzerDefinitionTranslator> translatorReference = serviceManager.requestReference( ElasticsearchAnalyzerDefinitionTranslator.class ) ) { ElasticsearchAnalyzerDefinitionTranslator translator = translatorReference.get(); // First, create a registry containing all relevant definitions ElasticsearchAnalysisDefinitionRegistry definitionRegistry = createDefinitionRegistry( analyzerReferences, mappingAnalyzerDefinitions, normalizerReferences, mappingNormalizerDefinitions, defaultDefinitionRegistry, translator ); // When all definitions are known and translated, actually initialize the references Stream.concat( analyzerReferences.stream(), normalizerReferences.stream() ) .map( this::getUninitializedReference ) .filter( Objects::nonNull ) .forEach( r -> r.initialize( definitionRegistry, translator ) ); } }
@Override public <S extends Service> ServiceReference<S> requestReference(Class<S> serviceRole) { return new ServiceReference<>( this, serviceRole ); }
private LuceneAnalysisDefinitionProvider getLuceneAnalyzerDefinitionProvider() { // Uses a Service so that integrators can inject alternative Lucene Analyzer definition providers try ( ServiceReference<LuceneAnalysisDefinitionSourceService> serviceRef = serviceManager.requestReference( LuceneAnalysisDefinitionSourceService.class ) ) { return serviceRef.get().getLuceneAnalyzerDefinitionProvider(); } }
() -> new ServiceReference( serviceManagerMock, (Class<?>) getCurrentArguments()[0] ) ).anyTimes();
@Override public void initializeReferences(Collection<AnalyzerReference> analyzerReferences, Map<String, AnalyzerDef> mappingAnalyzerDefinitions, Collection<AnalyzerReference> normalizerReferences, Map<String, NormalizerDef> mappingNormalizerDefinitions) { try ( ServiceReference<ElasticsearchAnalyzerDefinitionTranslator> translatorReference = serviceManager.requestReference( ElasticsearchAnalyzerDefinitionTranslator.class ) ) { ElasticsearchAnalyzerDefinitionTranslator translator = translatorReference.get(); // First, create a registry containing all relevant definitions ElasticsearchAnalysisDefinitionRegistry definitionRegistry = createDefinitionRegistry( analyzerReferences, mappingAnalyzerDefinitions, normalizerReferences, mappingNormalizerDefinitions, defaultDefinitionRegistry, translator ); // When all definitions are known and translated, actually initialize the references Stream.concat( analyzerReferences.stream(), normalizerReferences.stream() ) .map( this::getUninitializedReference ) .filter( Objects::nonNull ) .forEach( r -> r.initialize( definitionRegistry, translator ) ); } }
private QueryDescriptor createQueryDescriptor(Query luceneQuery, IndexedTypeSet entityTypes) { QueryDescriptor descriptor = null; if ( queryTranslatorPresent ) { try ( ServiceReference<LuceneQueryTranslator> translator = getServiceManager().requestReference( LuceneQueryTranslator.class ) ) { if ( translator.get().conversionRequired( entityTypes ) ) { descriptor = translator.get().convertLuceneQuery( luceneQuery ); } } } if ( descriptor == null ) { descriptor = new LuceneQueryDescriptor( luceneQuery ); } return descriptor; }
private QueryDescriptor createQueryDescriptor(Query luceneQuery, IndexedTypeSet entityTypes) { QueryDescriptor descriptor = null; if ( queryTranslatorPresent ) { try (ServiceReference<LuceneQueryTranslator> translator = getServiceManager().requestReference( LuceneQueryTranslator.class )) { if ( translator.get().conversionRequired( entityTypes ) ) { descriptor = translator.get().convertLuceneQuery( luceneQuery ); } } } if ( descriptor == null ) { descriptor = new LuceneQueryDescriptor( luceneQuery ); } return descriptor; }
@Override public Runnable createRunnable(int i) throws Exception { return new DeserializingThread( serializer.get(), serializedModel ); } }
@Override public Runnable createRunnable(int i) throws Exception { return new SerializingThread( serializer.get(), buildLuceneWorkList() ); } }
public synchronized IndexManagerType getIndexManagerType(String indexName, Properties[] indexProperties, SearchConfiguration cfg, WorkerBuildContext buildContext) { ServiceManager serviceManager = buildContext.getServiceManager(); //TODO the following code assumes that all shards use the same type; //we decided to commit on this limitation by design, yet it's not being validated at this point. String indexManagerImplementationName = indexProperties[0].getProperty( Environment.INDEX_MANAGER_IMPL_NAME ); String indexManagerImplementationKey = StringHelper.isEmpty( indexManagerImplementationName ) ? DEFAULT_INDEX_MANAGER_KEY : indexManagerImplementationName; if ( indexManagerImplementationsRegistry.containsKey( indexManagerImplementationKey ) ) { return indexManagerImplementationsRegistry.get( indexManagerImplementationKey ); } final IndexManagerType indexManagerType; try ( ServiceReference<IndexManagerFactory> indexManagerFactoryRef = serviceManager.requestReference( IndexManagerFactory.class ) ) { IndexManagerFactory indexManagerFactory = indexManagerFactoryRef.get(); indexManagerType = indexManagerFactory.createIndexManagerByName( indexManagerImplementationName ) .getIndexManagerType(); } indexManagerImplementationsRegistry.put( indexManagerImplementationKey, indexManagerType ); return indexManagerType; }
public synchronized IndexManagerType getIndexManagerType(String indexName, Properties[] indexProperties, SearchConfiguration cfg, WorkerBuildContext buildContext) { ServiceManager serviceManager = buildContext.getServiceManager(); //TODO the following code assumes that all shards use the same type; //we decided to commit on this limitation by design, yet it's not being validated at this point. String indexManagerImplementationName = indexProperties[0].getProperty( Environment.INDEX_MANAGER_IMPL_NAME ); String indexManagerImplementationKey = StringHelper.isEmpty( indexManagerImplementationName ) ? DEFAULT_INDEX_MANAGER_KEY : indexManagerImplementationName; if ( indexManagerImplementationsRegistry.containsKey( indexManagerImplementationKey ) ) { return indexManagerImplementationsRegistry.get( indexManagerImplementationKey ); } final IndexManagerType indexManagerType; try ( ServiceReference<IndexManagerFactory> indexManagerFactoryRef = serviceManager.requestReference( IndexManagerFactory.class ) ) { IndexManagerFactory indexManagerFactory = indexManagerFactoryRef.get(); indexManagerType = indexManagerFactory.createIndexManagerByName( indexManagerImplementationName ) .getIndexManagerType(); } indexManagerImplementationsRegistry.put( indexManagerImplementationKey, indexManagerType ); return indexManagerType; }
@Override public Explanation explain(int documentId) { if ( searchResult == null ) { execute(); } JsonObject hit = searchResult.getJsonObject() .get( "hits" ) .getAsJsonObject() .get( "hits" ) .getAsJsonArray() // TODO Is it right to use the document id that way? I am not quite clear about its semantics .get( documentId ) .getAsJsonObject(); try ( ServiceReference<JestClient> client = getExtendedSearchIntegrator().getServiceManager().requestReference( JestClient.class ) ) { Explain request = new Explain.Builder( hit.get( "_index" ).getAsString(), hit.get( "_type" ).getAsString(), hit.get( "_id" ).getAsString(), searcher.executedQuery ) .build(); DocumentResult response = client.get().executeRequest( request ); JsonObject explanation = response.getJsonObject().get( "explanation" ).getAsJsonObject(); return convertExplanation( explanation ); } }
@Override protected QueueConnectionFactory initializeJMSQueueConnectionFactory(Properties properties) { final String jmsConnectionFactoryName = properties.getProperty( JMS_CONNECTION_FACTORY ); try ( ServiceReference<NamedResolver> requestReference = getServiceManager().requestReference( NamedResolver.class ) ) { Object located = requestReference.get().locate( jmsConnectionFactoryName ); return (QueueConnectionFactory) located; } catch (RuntimeException e) { throw log.jmsQueueFactoryLookupException( jmsConnectionFactoryName, getIndexName(), e ); } }
@Override protected QueueConnectionFactory initializeJMSQueueConnectionFactory(Properties properties) { final String jmsConnectionFactoryName = properties.getProperty( JMS_CONNECTION_FACTORY ); try ( ServiceReference<NamedResolver> requestReference = getServiceManager().requestReference( NamedResolver.class ) ) { Object located = requestReference.get().locate( jmsConnectionFactoryName ); return (QueueConnectionFactory) located; } catch (RuntimeException e) { throw log.jmsQueueFactoryLookupException( jmsConnectionFactoryName, getIndexName(), e ); } }
private void deleteIndexIfExisting() { // Not actually needed, but do it to avoid cluttering the ES log if ( clientReference.get().executeRequest( new IndicesExists.Builder( actualIndexName ).build(), 404 ).getResponseCode() == 404 ) { return; } try { clientReference.get().executeRequest( new DeleteIndex.Builder( actualIndexName ).build() ); } catch (SearchException e) { // ignoring deletion of non-existing index if ( !e.getMessage().contains( "index_not_found_exception" ) ) { throw e; } } }
private void createIndex() { CreateIndex createIndex = new CreateIndex.Builder( actualIndexName ) .build(); clientReference.get().executeRequest( createIndex ); waitForIndexCreation(); }