@Override public HSQuery createHSQuery(SearchIntegrator integrator, IndexedTypeMap<CustomTypeMetadata> types) { ExtendedSearchIntegrator extendedIntegrator = integrator.unwrap( ExtendedSearchIntegrator.class ); return new LuceneHSQuery( luceneQuery, extendedIntegrator, types ); }
/** * DocumentExtractor returns a traverser over the full-text results (EntityInfo) * This operation is lazy bound: * - the query is executed * - results are not retrieved until actually requested * * DocumentExtractor objects *must* be closed when the results are no longer traversed. */ @Override public DocumentExtractor queryDocumentExtractor() { //keep the searcher open until the resultset is closed //find the directories LazyQueryState openSearcher = buildSearcher(); //FIXME: handle null searcher try { QueryHits queryHits = getQueryHits( openSearcher, calculateTopDocsRetrievalSize(), true ); int max = max( firstResult, queryHits.getTotalHits() ); return buildDocumentExtractor( openSearcher, queryHits, firstResult, max ); } catch (IOException e) { closeSearcher( openSearcher ); throw new SearchException( "Unable to query Lucene index", e ); } }
@Override public HSQuery luceneQuery(Query query) { clearCachedResults(); this.luceneQuery = query; return this; }
this.targetedEntityBindingsByName = buildTargetedEntityIndexBindingsByName(); DocumentBuilderIndexedEntity builder = entityIndexBinding.getDocumentBuilder(); IndexedTypeIdentifier typeIdentifier = builder.getTypeIdentifier(); searcherSimilarity = checkSimilarity( searcherSimilarity, entityIndexBinding.getSimilarity() ); if ( builder.getIdFieldName() != null ) { idFieldNames.add( builder.getIdFieldName() ); Set<IndexManager> indexManagers = getIndexManagers( entityIndexBinding ); targetedIndexes.addAll( indexManagers ); Optional<CustomTypeMetadata> customTypeMetadata = getCustomTypeMetadata( typeIdentifier ); collectSortableFields( sortConfigurations, indexManagers, builder.getTypeMetadata(), customTypeMetadata ); validateSortFields( targetedEntityBindingsByName.values() ); ); final Query filteredQuery = filterQueryByTenantId( filterQueryByClasses( luceneQuery ) ); final QueryFilters facetingFilters = getFacetManager().getFacetFilters();
@Override public int queryResultSize() { if ( resultSize == null ) { //the timeoutManager does not need to be stopped nor reset as a start does indeed reset getTimeoutManager().start(); //get result size without object initialization LazyQueryState searcher = buildSearcher( extendedIntegrator, false ); if ( searcher == null ) { resultSize = 0; } else { try { QueryHits queryHits = getQueryHits( searcher, 0, false ); resultSize = queryHits.getTotalHits(); } catch (IOException e) { throw new SearchException( "Unable to query Lucene index", e ); } finally { closeSearcher( searcher ); } } } return this.resultSize; }
QueryFilters filters = createFilters(); QueryHits queryHits; Collection<FacetingRequest> facetingRequests = getFacetManager().getFacetRequests().values(); Map<FacetingRequest, FacetMetadata> facetingRequestsAndMetadata = buildFacetingRequestsAndMetadata( facetingRequests, targetedEntityBindingsByName.values() ); filters, sort, getTimeoutManager(), facetingRequestsAndMetadata, spatialSearchCenter, null, 0, getTimeoutManager(), null, spatialSearchCenter, sort, n, getTimeoutManager(), facetingRequestsAndMetadata, spatialSearchCenter, getFacetManager().setFacetResults( queryHits.getFacets() ); return queryHits;
@Override public Explanation explain(int documentId) { //don't use TimeoutManager here as explain is a dev tool when things are weird... or slow :) Explanation explanation = null; LazyQueryState searcher = buildSearcher( extendedIntegrator, true ); if ( searcher == null ) { throw new SearchException( "Unable to build explanation for document id:" + documentId + ". no index found" ); } try { QueryFilters filters = createFilters(); explanation = searcher.explain( filters, documentId ); } catch (IOException e) { throw new SearchException( "Unable to query Lucene index and build explanation", e ); } finally { closeSearcher( searcher ); } return explanation; }
private LazyQueryState buildSearcher() { return buildSearcher( extendedIntegrator, null ); }
private QueryFilters createFilters() { List<Query> filterQueries = new ArrayList<>(); if ( !filterDefinitions.isEmpty() ) { for ( FullTextFilterImpl fullTextFilter : filterDefinitions.values() ) { Query filter = buildLuceneFilter( fullTextFilter ); if ( filter != null ) { filterQueries.add( filter ); } } } if ( userFilter != null ) { filterQueries.add( userFilter ); } if ( filterQueries.isEmpty() ) { return QueryFilters.EMPTY_FILTERSET; } else { return new QueryFilters( filterQueries ); } }
return addCachingWrapper( filterQuery, def );
this.targetedEntityBindingsByName = buildTargetedEntityIndexBindingsByName(); DocumentBuilderIndexedEntity builder = entityIndexBinding.getDocumentBuilder(); IndexedTypeIdentifier typeIdentifier = builder.getTypeIdentifier(); searcherSimilarity = checkSimilarity( searcherSimilarity, entityIndexBinding.getSimilarity() ); if ( builder.getIdFieldName() != null ) { idFieldNames.add( builder.getIdFieldName() ); Set<IndexManager> indexManagers = getIndexManagers( entityIndexBinding ); targetedIndexes.addAll( indexManagers ); Optional<CustomTypeMetadata> customTypeMetadata = getCustomTypeMetadata( typeIdentifier ); collectSortableFields( sortConfigurations, indexManagers, builder.getTypeMetadata(), customTypeMetadata ); validateSortFields( targetedEntityBindingsByName.values() ); ); final Query filteredQuery = filterQueryByTenantId( filterQueryByClasses( luceneQuery ) ); final QueryFilters facetingFilters = getFacetManager().getFacetFilters();
@Override public int queryResultSize() { if ( resultSize == null ) { //the timeoutManager does not need to be stopped nor reset as a start does indeed reset getTimeoutManager().start(); //get result size without object initialization LazyQueryState searcher = buildSearcher( extendedIntegrator, false ); if ( searcher == null ) { resultSize = 0; } else { try { QueryHits queryHits = getQueryHits( searcher, 0 ); resultSize = queryHits.getTotalHits(); } catch (IOException e) { throw new SearchException( "Unable to query Lucene index", e ); } finally { closeSearcher( searcher ); } } } return this.resultSize; }
QueryFilters filters = createFilters(); QueryHits queryHits; Collection<FacetingRequest> facetingRequests = getFacetManager().getFacetRequests().values(); Map<FacetingRequest, FacetMetadata> facetingRequestsAndMetadata = buildFacetingRequestsAndMetadata( facetingRequests, targetedEntityBindingsByName.values() ); sort, collectHits, getTimeoutManager(), facetingRequestsAndMetadata, spatialSearchCenter, 0, collectHits, getTimeoutManager(), null, spatialSearchCenter, n, collectHits, getTimeoutManager(), facetingRequestsAndMetadata, spatialSearchCenter, getFacetManager().setFacetResults( queryHits.getFacets() ); return queryHits;
@Override public Explanation explain(int documentId) { //don't use TimeoutManager here as explain is a dev tool when things are weird... or slow :) Explanation explanation = null; LazyQueryState searcher = buildSearcher( extendedIntegrator, true ); if ( searcher == null ) { throw new SearchException( "Unable to build explanation for document id:" + documentId + ". no index found" ); } try { QueryFilters filters = createFilters(); explanation = searcher.explain( filters, documentId ); } catch (IOException e) { throw new SearchException( "Unable to query Lucene index and build explanation", e ); } finally { closeSearcher( searcher ); } return explanation; }
private LazyQueryState buildSearcher() { return buildSearcher( extendedIntegrator, null ); }
private QueryFilters createFilters() { List<Query> filterQueries = new ArrayList<>(); if ( !filterDefinitions.isEmpty() ) { for ( FullTextFilterImpl fullTextFilter : filterDefinitions.values() ) { Query filter = buildLuceneFilter( fullTextFilter ); if ( filter != null ) { filterQueries.add( filter ); } } } if ( userFilter != null ) { filterQueries.add( userFilter ); } if ( filterQueries.isEmpty() ) { return QueryFilters.EMPTY_FILTERSET; } else { return new QueryFilters( filterQueries ); } }
return addCachingWrapper( filterQuery, def );
/** * DocumentExtractor returns a traverser over the full-text results (EntityInfo) * This operation is lazy bound: * - the query is executed * - results are not retrieved until actually requested * * DocumentExtractor objects *must* be closed when the results are no longer traversed. */ @Override public DocumentExtractor queryDocumentExtractor() { //keep the searcher open until the resultset is closed //find the directories LazyQueryState openSearcher = buildSearcher(); //FIXME: handle null searcher try { QueryHits queryHits = getQueryHits( openSearcher, calculateTopDocsRetrievalSize() ); int max = max( firstResult, queryHits.getTotalHits() ); return buildDocumentExtractor( openSearcher, queryHits, firstResult, max ); } catch (IOException e) { closeSearcher( openSearcher ); throw new SearchException( "Unable to query Lucene index", e ); } }
@Override public HSQuery createHSQuery(SearchIntegrator integrator, IndexedTypeMap<CustomTypeMetadata> types) { ExtendedSearchIntegrator extendedIntegrator = integrator.unwrap( ExtendedSearchIntegrator.class ); return new LuceneHSQuery( luceneQuery, extendedIntegrator, types ); }
@Override public HSQuery luceneQuery(Query query) { clearCachedResults(); this.luceneQuery = query; return this; }