I've got the same issue while running kewords query against fields configured with stop words.
Can I suggest to use a strategy similar to ConnectedMultiFieldsPhraseQueryBuilder.createQuery(FieldContext) : ? {code:title= ConnectedMultiFieldsPhraseQueryBuilder.createQuery(FieldContext):[144,148]|borderStyle=solid} [...] final int size = termsPerPosition.size(); if ( size == 0 ) { perFieldQuery = new BooleanQuery( ); } else if ( size <= 1 ) { [...] {code}
Implementing a similar code into ConnectedMultiFieldsTermQueryBuilder.createQuery(FieldContext,ConversionContext) will return an empty query for an _"empty after stopwords removal"_ keyword query.
From: {code:title= ConnectedMultiFieldsTermQueryBuilder.createQuery(FieldContext,ConversionContext):[110:112]|borderStyle=solid} [...] if ( terms.size() == 0 ) { throw log.queryWithNoTermsAfterAnalysis( fieldContext.getField(), searchTerm ); } [...] {code}
To: {code:title= ConnectedMultiFieldsTermQueryBuilder.createQuery(FieldContext,ConversionContext):[110:112]|borderStyle=solid} [...] if ( terms.size() == 0 ) { perFieldQuery = new BooleanQuery( ); // Just a warning instead of an exception log.warnf("The query string '%2$s' applied on field '%1$s' has no meaningfull tokens to be matched. " + "Validate the query input against the Analyzer applied on this field.", fieldContext.getField(),searchTerm); } [...] {code}
|