private void validateNullValueIsSearchable(FieldContext fieldContext) { if ( fieldContext.isIgnoreFieldBridge() ) { if ( value == null ) { throw log.unableToSearchOnNullValueWithoutFieldBridge( fieldContext.getField() ); } } }
/** * Factory method to generate a prefix query. */ @Override protected Query newPrefixQuery(String text) { BooleanQuery.Builder bqb = new BooleanQuery.Builder().setDisableCoord( true ); for ( FieldsContext fieldsContext : fieldsContexts ) { for ( FieldContext fieldContext : fieldsContext ) { PrefixQuery prefix = new PrefixQuery( new Term( fieldContext.getField(), text ) ); bqb.add( fieldContext.getFieldCustomizer().setWrappedQuery( prefix ).createQuery(), BooleanClause.Occur.SHOULD ); } } return simplify( bqb.build() ); }
/** * Factory method to generate a prefix query. */ @Override protected Query newPrefixQuery(String text) { BooleanQuery.Builder bqb = new BooleanQuery.Builder().setDisableCoord( true ); for ( FieldsContext fieldsContext : fieldsContexts ) { for ( FieldContext fieldContext : fieldsContext ) { PrefixQuery prefix = new PrefixQuery( new Term( fieldContext.getField(), text ) ); bqb.add( fieldContext.getFieldCustomizer().setWrappedQuery( prefix ).createQuery(), BooleanClause.Occur.SHOULD ); } } return simplify( bqb.build() ); }
private void validateNullValueIsSearchable(FieldContext fieldContext) { if ( fieldContext.isIgnoreFieldBridge() ) { if ( value == null ) { throw log.unableToSearchOnNullValueWithoutFieldBridge( fieldContext.getField() ); } } }
/** * Factory method to generate a fuzzy query. */ @Override protected Query newFuzzyQuery(String text, int fuzziness) { BooleanQuery.Builder bqb = new BooleanQuery.Builder().setDisableCoord( true ); for ( FieldsContext fieldsContext : fieldsContexts ) { for ( FieldContext fieldContext : fieldsContext ) { Query q = new FuzzyQuery( new Term( fieldContext.getField(), text ), fuzziness ); if ( q != null ) { bqb.add( fieldContext.getFieldCustomizer().setWrappedQuery( q ).createQuery(), BooleanClause.Occur.SHOULD ); } } } return simplify( bqb.build() ); }
private String buildSearchTerm(FieldContext fieldContext, DocumentBuilderIndexedEntity documentBuilder, ConversionContext conversionContext) { if ( fieldContext.isIgnoreFieldBridge() ) { String stringform = value.toString(); if ( stringform == null ) { throw new SearchException( "When ignoreFieldBridge() is enabled, toString() on the value is used: the returned string must not be null: " + "on field " + fieldContext.getField() ); } return stringform; } else { // need to go via the appropriate bridge, because value is an object, eg boolean, and must be converted to a string first return fieldContext.objectToString( documentBuilder, value, conversionContext ); } }
/** * Factory method to generate a fuzzy query. */ @Override protected Query newFuzzyQuery(String text, int fuzziness) { BooleanQuery.Builder bqb = new BooleanQuery.Builder().setDisableCoord( true ); for ( FieldsContext fieldsContext : fieldsContexts ) { for ( FieldContext fieldContext : fieldsContext ) { Query q = new FuzzyQuery( new Term( fieldContext.getField(), text ), fuzziness ); if ( q != null ) { bqb.add( fieldContext.getFieldCustomizer().setWrappedQuery( q ).createQuery(), BooleanClause.Occur.SHOULD ); } } } return simplify( bqb.build() ); }
private String buildSearchTerm(FieldContext fieldContext, DocumentBuilderIndexedEntity documentBuilder, ConversionContext conversionContext) { if ( fieldContext.isIgnoreFieldBridge() ) { String stringform = value.toString(); if ( stringform == null ) { throw new SearchException( "When ignoreFieldBridge() is enabled, toString() on the value is used: the returned string must not be null: " + "on field " + fieldContext.getField() ); } return stringform; } else { // need to go via the appropriate bridge, because value is an object, eg boolean, and must be converted to a string first return fieldContext.objectToString( documentBuilder, value, conversionContext ); } }
private Query createQuery(FieldContext fieldContext, ConversionContext conversionContext) { final Query perFieldQuery; final String fieldName = fieldContext.getField(); final DocumentBuilderIndexedEntity documentBuilder = queryContext.getDocumentBuilder(); if ( Helper.requiresNumericQuery( documentBuilder, fieldContext, rangeContext.getFrom(), rangeContext.getTo() ) ) { perFieldQuery = createNumericRangeQuery( fieldName, rangeContext ); } else { perFieldQuery = createKeywordRangeQuery( fieldName, rangeContext, queryContext, conversionContext, fieldContext ); } return fieldContext.getFieldCustomizer().setWrappedQuery( perFieldQuery ).createQuery(); }
private Query createTermQuery(FieldContext fieldContext, String term) { Query query; final String fieldName = fieldContext.getField(); switch ( termContext.getApproximation() ) { case EXACT: query = new TermQuery( new Term( fieldName, term ) ); break; case WILDCARD: query = new WildcardQuery( new Term( fieldName, term ) ); break; case FUZZY: int maxEditDistance = getMaxEditDistance( term ); query = new FuzzyQuery( new Term( fieldName, term ), maxEditDistance, termContext.getPrefixLength() ); break; default: throw new AssertionFailure( "Unknown approximation: " + termContext.getApproximation() ); } return query; }
private Query createQuery(FieldContext fieldContext, ConversionContext conversionContext) { final Query perFieldQuery; final String fieldName = fieldContext.getField(); final DocumentBuilderIndexedEntity documentBuilder = queryContext.getDocumentBuilder(); if ( Helper.requiresNumericQuery( documentBuilder, fieldContext, rangeContext.getFrom(), rangeContext.getTo() ) ) { perFieldQuery = createNumericRangeQuery( fieldName, rangeContext ); } else { perFieldQuery = createKeywordRangeQuery( fieldName, rangeContext, queryContext, conversionContext, fieldContext ); } return fieldContext.getFieldCustomizer().setWrappedQuery( perFieldQuery ).createQuery(); }
private Query createTermQuery(FieldContext fieldContext, String term) { Query query; final String fieldName = fieldContext.getField(); switch ( termContext.getApproximation() ) { case EXACT: query = new TermQuery( new Term( fieldName, term ) ); break; case WILDCARD: query = new WildcardQuery( new Term( fieldName, term ) ); break; case FUZZY: int maxEditDistance = getMaxEditDistance( term ); query = new FuzzyQuery( new Term( fieldName, term ), maxEditDistance, termContext.getPrefixLength() ); break; default: throw new AssertionFailure( "Unknown approximation: " + termContext.getApproximation() ); } return query; }
/** * Factory method to generate a phrase query with slop. */ @Override protected Query newPhraseQuery(String text, int slop) { BooleanQuery.Builder bqb = new BooleanQuery.Builder().setDisableCoord( true ); for ( FieldsContext fieldsContext : fieldsContexts ) { for ( FieldContext fieldContext : fieldsContext ) { Query q = createPhraseQuery( fieldContext.getField(), text, slop ); if ( q != null ) { bqb.add( fieldContext.getFieldCustomizer().setWrappedQuery( q ).createQuery(), BooleanClause.Occur.SHOULD ); } } } return simplify( bqb.build() ); }
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; }
/** * Factory method to generate a phrase query with slop. */ @Override protected Query newPhraseQuery(String text, int slop) { BooleanQuery.Builder bqb = new BooleanQuery.Builder().setDisableCoord( true ); for ( FieldsContext fieldsContext : fieldsContexts ) { for ( FieldContext fieldContext : fieldsContext ) { Query q = createPhraseQuery( fieldContext.getField(), text, slop ); if ( q != null ) { bqb.add( fieldContext.getFieldCustomizer().setWrappedQuery( q ).createQuery(), BooleanClause.Occur.SHOULD ); } } } return simplify( bqb.build() ); }
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; }
/** * Factory method to generate a standard query (no phrase or prefix operators). */ @Override protected Query newDefaultQuery(String text) { BooleanQuery.Builder bqb = new BooleanQuery.Builder().setDisableCoord( true ); for ( FieldsContext fieldsContext : fieldsContexts ) { for ( FieldContext fieldContext : fieldsContext ) { Query q = createBooleanQuery( fieldContext.getField(), text, getDefaultOperator() ); if ( q != null ) { bqb.add( fieldContext.getFieldCustomizer().setWrappedQuery( q ).createQuery(), BooleanClause.Occur.SHOULD ); } } } return simplify( bqb.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(); }
/** * Factory method to generate a standard query (no phrase or prefix operators). */ @Override protected Query newDefaultQuery(String text) { BooleanQuery.Builder bqb = new BooleanQuery.Builder().setDisableCoord( true ); for ( FieldsContext fieldsContext : fieldsContexts ) { for ( FieldContext fieldContext : fieldsContext ) { Query q = createBooleanQuery( fieldContext.getField(), text, getDefaultOperator() ); if ( q != null ) { bqb.add( fieldContext.getFieldCustomizer().setWrappedQuery( q ).createQuery(), BooleanClause.Occur.SHOULD ); } } } return simplify( bqb.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(); }