private Query createLuceneQuery(FieldContext fieldContext, String searchTerm) { Query query; List<String> terms = getAllTermsFromText( fieldContext.getField(), searchTerm, queryContext.getQueryAnalyzerReference().unwrap( LuceneAnalyzerReference.class ).getAnalyzer() ); if ( terms.size() == 0 ) { throw log.queryWithNoTermsAfterAnalysis( fieldContext.getField(), searchTerm ); } else if ( terms.size() == 1 ) { query = createTermQuery( fieldContext, terms.get( 0 ) ); } else { BooleanQuery.Builder booleanQueryBuilder = new BooleanQuery.Builder(); for ( String localTerm : terms ) { Query termQuery = createTermQuery( fieldContext, localTerm ); booleanQueryBuilder.add( termQuery, BooleanClause.Occur.SHOULD ); } query = booleanQueryBuilder.build(); } return query; }
private Query createLuceneQuery(FieldContext fieldContext, String searchTerm) { Query query; List<String> terms = getAllTermsFromText( fieldContext.getField(), searchTerm, queryContext.getQueryAnalyzerReference().unwrap( LuceneAnalyzerReference.class ).getAnalyzer() ); if ( terms.size() == 0 ) { throw log.queryWithNoTermsAfterAnalysis( fieldContext.getField(), searchTerm ); } else if ( terms.size() == 1 ) { query = createTermQuery( fieldContext, terms.get( 0 ) ); } else { BooleanQuery.Builder booleanQueryBuilder = new BooleanQuery.Builder(); for ( String localTerm : terms ) { Query termQuery = createTermQuery( fieldContext, localTerm ); booleanQueryBuilder.add( termQuery, BooleanClause.Occur.SHOULD ); } query = booleanQueryBuilder.build(); } return query; }
if ( queryContext.getQueryAnalyzerReference().is( RemoteAnalyzerReference.class ) ) { perFieldQuery = new RemotePhraseQuery( fieldName, phraseContext.getSlop(), sentence, queryContext.getOriginalAnalyzerReference().unwrap( RemoteAnalyzerReference.class ), queryContext.getQueryAnalyzerReference().unwrap( RemoteAnalyzerReference.class ) ); Analyzer analyzer = queryContext.getQueryAnalyzerReference().unwrap( LuceneAnalyzerReference.class ).getAnalyzer();
if ( queryContext.getQueryAnalyzerReference().is( RemoteAnalyzerReference.class ) ) { perFieldQuery = new RemotePhraseQuery( fieldName, phraseContext.getSlop(), sentence, queryContext.getOriginalAnalyzerReference().unwrap( RemoteAnalyzerReference.class ), queryContext.getQueryAnalyzerReference().unwrap( RemoteAnalyzerReference.class ) ); Analyzer analyzer = queryContext.getQueryAnalyzerReference().unwrap( LuceneAnalyzerReference.class ).getAnalyzer();
throws IOException { String fieldName = fieldContext.getField(); Analyzer analyzer = queryContext.getQueryAnalyzerReference().unwrap( LuceneAnalyzerReference.class ).getAnalyzer(); if ( !fieldContext.applyAnalyzer() ) {
throws IOException { String fieldName = fieldContext.getField(); Analyzer analyzer = queryContext.getQueryAnalyzerReference().unwrap( LuceneAnalyzerReference.class ).getAnalyzer(); if ( !fieldContext.applyAnalyzer() ) {
@Override public Query createQuery() { if ( simpleQueryString == null ) { throw LOG.simpleQueryParserDoesNotSupportNullQueries(); } Query query; if ( queryContext.getQueryAnalyzerReference().is( RemoteAnalyzerReference.class ) ) { RemoteSimpleQueryStringQuery.Builder builder = new RemoteSimpleQueryStringQuery.Builder() .query( simpleQueryString ) .withAndAsDefaultOperator( withAndAsDefaultOperator ) .originalRemoteAnalyzerReference( queryContext.getOriginalAnalyzerReference().unwrap( RemoteAnalyzerReference.class ) ) .queryRemoteAnalyzerReference( queryContext.getQueryAnalyzerReference().unwrap( RemoteAnalyzerReference.class ) ); fieldsContexts.forEach( fieldsContext -> { fieldsContext.forEach( fieldContext -> { builder.field( fieldContext.getField(), fieldContext.getFieldCustomizer().getBoost() ); } ); } ); query = builder.build(); } else { ConnectedSimpleQueryParser queryParser = new ConnectedSimpleQueryParser( queryContext.getQueryAnalyzerReference().unwrap( LuceneAnalyzerReference.class ).getAnalyzer(), fieldsContexts ); queryParser.setDefaultOperator( withAndAsDefaultOperator ? Occur.MUST : Occur.SHOULD ); query = queryParser.parse( simpleQueryString ); } return queryCustomizer.setWrappedQuery( query ).createQuery(); }
@Override public Query createQuery() { if ( simpleQueryString == null ) { throw LOG.simpleQueryParserDoesNotSupportNullQueries(); } Query query; if ( queryContext.getQueryAnalyzerReference().is( RemoteAnalyzerReference.class ) ) { RemoteSimpleQueryStringQuery.Builder builder = new RemoteSimpleQueryStringQuery.Builder() .query( simpleQueryString ) .withAndAsDefaultOperator( withAndAsDefaultOperator ) .originalRemoteAnalyzerReference( queryContext.getOriginalAnalyzerReference().unwrap( RemoteAnalyzerReference.class ) ) .queryRemoteAnalyzerReference( queryContext.getQueryAnalyzerReference().unwrap( RemoteAnalyzerReference.class ) ); fieldsContexts.forEach( fieldsContext -> { fieldsContext.forEach( fieldContext -> { builder.field( fieldContext.getField(), fieldContext.getFieldCustomizer().getBoost() ); } ); } ); query = builder.build(); } else { ConnectedSimpleQueryParser queryParser = new ConnectedSimpleQueryParser( queryContext.getQueryAnalyzerReference().unwrap( LuceneAnalyzerReference.class ).getAnalyzer(), fieldsContexts ); queryParser.setDefaultOperator( withAndAsDefaultOperator ? Occur.MUST : Occur.SHOULD ); query = queryParser.parse( simpleQueryString ); } return queryCustomizer.setWrappedQuery( query ).createQuery(); }
private Query createRemoteQuery(FieldContext fieldContext, String searchTerm) { // in the case of wildcard, we just return a WildcardQuery if ( termContext.getApproximation() == TermQueryContext.Approximation.WILDCARD ) { return new WildcardQuery( new Term( fieldContext.getField(), searchTerm ) ); } RemoteMatchQuery.Builder queryBuilder = new RemoteMatchQuery.Builder(); queryBuilder .field( fieldContext.getField() ) .searchTerms( searchTerm ) .analyzerReference( queryContext.getOriginalAnalyzerReference().unwrap( RemoteAnalyzerReference.class ), queryContext.getQueryAnalyzerReference().unwrap( RemoteAnalyzerReference.class ) ); if ( termContext.getApproximation() == TermQueryContext.Approximation.FUZZY ) { // TODO: remove the threshold method as it's deprecated and not accurate // the max edit distance based on the total searchTerm length which is wrong // It might be a good time to consider removing the deprecated threshold method queryBuilder.maxEditDistance( getMaxEditDistance( searchTerm ) ); } return queryBuilder.build(); }
private Query createRemoteQuery(FieldContext fieldContext, String searchTerm) { // in the case of wildcard, we just return a WildcardQuery if ( termContext.getApproximation() == TermQueryContext.Approximation.WILDCARD ) { return new WildcardQuery( new Term( fieldContext.getField(), searchTerm ) ); } RemoteMatchQuery.Builder queryBuilder = new RemoteMatchQuery.Builder(); queryBuilder .field( fieldContext.getField() ) .searchTerms( searchTerm ) .analyzerReference( queryContext.getOriginalAnalyzerReference().unwrap( RemoteAnalyzerReference.class ), queryContext.getQueryAnalyzerReference().unwrap( RemoteAnalyzerReference.class ) ); if ( termContext.getApproximation() == TermQueryContext.Approximation.FUZZY ) { // TODO: remove the threshold method as it's deprecated and not accurate // the max edit distance based on the total searchTerm length which is wrong // It might be a good time to consider removing the deprecated threshold method queryBuilder.maxEditDistance( getMaxEditDistance( searchTerm ) ); } return queryBuilder.build(); }
private static Query createKeywordRangeQuery(String fieldName, RangeQueryContext rangeContext, QueryBuildingContext queryContext, ConversionContext conversionContext, FieldContext fieldContext) { final AnalyzerReference analyzerReference = queryContext.getQueryAnalyzerReference(); final DocumentBuilderIndexedEntity documentBuilder = queryContext.getDocumentBuilder(); final String fromString = rangeContext.hasFrom() ? fieldContext.objectToString( documentBuilder, rangeContext.getFrom(), conversionContext ) : null; final String toString = rangeContext.hasTo() ? fieldContext.objectToString( documentBuilder, rangeContext.getTo(), conversionContext ) : null; String lowerTerm; String upperTerm; if ( analyzerReference.is( LuceneAnalyzerReference.class ) ) { final Analyzer queryAnalyzer = analyzerReference.unwrap( LuceneAnalyzerReference.class ).getAnalyzer(); lowerTerm = fromString == null ? null : Helper.getAnalyzedTerm( fieldName, fromString, "from", queryAnalyzer, fieldContext ); upperTerm = toString == null ? null : Helper.getAnalyzedTerm( fieldName, toString, "to", queryAnalyzer, fieldContext ); } else { lowerTerm = fromString == null ? null : fromString; upperTerm = toString == null ? null : toString; } return TermRangeQuery.newStringRange( fieldName, lowerTerm, upperTerm, !rangeContext.isExcludeFrom(), !rangeContext.isExcludeTo() ); }
private static Query createKeywordRangeQuery(String fieldName, RangeQueryContext rangeContext, QueryBuildingContext queryContext, ConversionContext conversionContext, FieldContext fieldContext) { final AnalyzerReference analyzerReference = queryContext.getQueryAnalyzerReference(); final DocumentBuilderIndexedEntity documentBuilder = queryContext.getDocumentBuilder(); final String fromString = rangeContext.hasFrom() ? fieldContext.objectToString( documentBuilder, rangeContext.getFrom(), conversionContext ) : null; final String toString = rangeContext.hasTo() ? fieldContext.objectToString( documentBuilder, rangeContext.getTo(), conversionContext ) : null; String lowerTerm; String upperTerm; if ( analyzerReference.is( LuceneAnalyzerReference.class ) ) { final Analyzer queryAnalyzer = analyzerReference.unwrap( LuceneAnalyzerReference.class ).getAnalyzer(); lowerTerm = fromString == null ? null : Helper.getAnalyzedTerm( fieldName, fromString, "from", queryAnalyzer, fieldContext ); upperTerm = toString == null ? null : Helper.getAnalyzedTerm( fieldName, toString, "to", queryAnalyzer, fieldContext ); } else { lowerTerm = fromString == null ? null : fromString; upperTerm = toString == null ? null : toString; } return TermRangeQuery.newStringRange( fieldName, lowerTerm, upperTerm, !rangeContext.isExcludeFrom(), !rangeContext.isExcludeTo() ); }
if ( queryContext.getQueryAnalyzerReference().is( RemoteAnalyzerReference.class ) ) { return createRemoteQuery( fieldContext, searchTerm );
if ( queryContext.getQueryAnalyzerReference().is( RemoteAnalyzerReference.class ) ) { perFieldQuery = createRemoteQuery( fieldContext, searchTerm );