Skip to content

Commit

Permalink
HSEARCH-3042 Forbid search analyzer without analyzer
Browse files Browse the repository at this point in the history
  • Loading branch information
fax4ever committed Sep 26, 2019
1 parent 90bbc26 commit 8bc9d9b
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 0 deletions.
Expand Up @@ -591,4 +591,8 @@ SearchException aggregationDefinedOnDifferentIndexes(SearchAggregation<?> aggreg
@Message(id = ID_OFFSET_3 + 86, value = "Multiple conflicting nested document paths to build a projection for field '%1$s'. '%2$s' vs. '%3$s'.")
SearchException conflictingNestedDocumentPathHierarchyForProjection(String absoluteFieldPath,
List<String> nestedDocumentPathHierarchy1, List<String> nestedDocumentPathHierarchy2, @Param EventContext context);

@Message(id = ID_OFFSET_3 + 87, value = "Cannot apply a search analyzer if an analyzer has not been defined on the same field." +
" Search analyzer: '%1$s'.")
SearchException searchAnalyzerWithoutAnalyzer(String searchAnalyzer, @Param EventContext context);
}
Expand Up @@ -149,6 +149,10 @@ public IndexFieldType<String> toIndexFieldType() {
}
}
else {
if ( searchAnalyzerName != null ) {
throw log.searchAnalyzerWithoutAnalyzer( searchAnalyzerName, getBuildContext().getEventContext() );
}

mapping.setType( DataTypes.KEYWORD );
mapping.setNormalizer( normalizerName );
mapping.setDocValues( resolvedSortable || resolvedAggregable );
Expand Down
Expand Up @@ -571,4 +571,8 @@ SearchException aggregationDefinedOnDifferentIndexes(SearchAggregation<?> aggreg

@Message(id = ID_OFFSET_2 + 103, value = "This field does not support aggregations.")
SearchException unsupportedDSLAggregations(@Param EventContext context);

@Message(id = ID_OFFSET_2 + 104, value = "Cannot apply a search analyzer if an analyzer has not been defined on the same field." +
" Search analyzer: '%1$s'.")
SearchException searchAnalyzerWithoutAnalyzer(String searchAnalyzer, @Param EventContext context);
}
Expand Up @@ -37,6 +37,8 @@ class LuceneStringIndexFieldTypeOptionsStep

private String analyzerName;
private Analyzer analyzer;

private String searchAnalyzerName;
private Analyzer searchAnalyzer;

private String normalizerName;
Expand All @@ -63,6 +65,7 @@ public LuceneStringIndexFieldTypeOptionsStep analyzer(String analyzerName) {

@Override
public LuceneStringIndexFieldTypeOptionsStep searchAnalyzer(String searchAnalyzerName) {
this.searchAnalyzerName = searchAnalyzerName;
this.searchAnalyzer = getAnalysisDefinitionRegistry().getAnalyzerDefinition( searchAnalyzerName );
if ( searchAnalyzer == null ) {
throw log.unknownAnalyzer( searchAnalyzerName, getBuildContext().getEventContext() );
Expand Down Expand Up @@ -124,6 +127,9 @@ public LuceneIndexFieldType<String> toIndexFieldType() {
throw log.cannotUseAnalyzerOnAggregableField( analyzerName, getBuildContext().getEventContext() );
}
}
else if ( searchAnalyzer != null ) {
throw log.searchAnalyzerWithoutAnalyzer( searchAnalyzerName, getBuildContext().getEventContext() );
}

Analyzer analyzerOrNormalizer = analyzer != null ? analyzer : normalizer;

Expand Down
Expand Up @@ -476,6 +476,32 @@ public void analyzerAndNormalizer() {
.build() );
}

@Test
public void searchAnalyzerWithoutAnalyzer() {
SubTest.expectException(
"Setting a search analyzer, without setting an analyzer on the same field",
() -> setup( ctx -> {
IndexSchemaElement root = ctx.getSchemaElement();
root.field(
"myField",
f -> f.asString()
.searchAnalyzer( DefaultAnalysisDefinitions.ANALYZER_STANDARD_ENGLISH.name )
)
.toReference();
} )
)
.assertThrown()
.isInstanceOf( SearchException.class )
.hasMessageMatching( FailureReportUtils.buildFailureReportPattern()
.typeContext( TYPE_NAME )
.indexContext( INDEX_NAME )
.failure(
"Cannot apply a search analyzer if an analyzer has not been defined on the same field",
"'" + DefaultAnalysisDefinitions.ANALYZER_STANDARD_ENGLISH.name + "'"
)
.build() );
}

@Test
public void missingGetReferenceCall() {
for ( Function<IndexFieldTypeFactory, StandardIndexFieldTypeOptionsStep<?, ?>> typedContextFunction : MAIN_TYPES ) {
Expand Down

0 comments on commit 8bc9d9b

Please sign in to comment.