Skip to content

Commit

Permalink
HSEARCH-3042 Test search analyzer using phrase predicate
Browse files Browse the repository at this point in the history
  • Loading branch information
fax4ever committed Sep 26, 2019
1 parent b10d986 commit 38b9891
Showing 1 changed file with 29 additions and 2 deletions.
Expand Up @@ -222,28 +222,46 @@ public void analyzerOverride() {

String whitespaceAnalyzedField = indexMapping.whitespaceAnalyzedField.relativeFieldName;
String whitespaceLowercaseAnalyzedField = indexMapping.whitespaceLowercaseAnalyzedField.relativeFieldName;
String whitespaceLowercaseSearchAnalyzedField = indexMapping.whitespaceLowercaseSearchAnalyzedField.relativeFieldName;

// Terms are never lower-cased, neither at write nor at query time.
SearchQuery<DocumentReference> query = scope.query()
.predicate( f -> f.phrase().field( whitespaceAnalyzedField ).matching( "ONCE UPON" ) )
.toQuery();

assertThat( query )
.hasDocRefHitsAnyOrder( INDEX_NAME, DOCUMENT_2 );

// Terms are always lower-cased, both at write and at query time.
query = scope.query()
.predicate( f -> f.phrase().field( whitespaceLowercaseAnalyzedField ).matching( "ONCE UPON" ) )
.toQuery();

assertThat( query )
.hasDocRefHitsAnyOrder( INDEX_NAME, DOCUMENT_1, DOCUMENT_2, DOCUMENT_3 );

// Terms are lower-cased only at query time. Because we are overriding the analyzer in the predicate.
query = scope.query()
.predicate( f -> f.phrase().field( whitespaceAnalyzedField ).matching( "ONCE UPON" )
.analyzer( OverrideAnalysisDefinitions.ANALYZER_WHITESPACE_LOWERCASE.name ) )
.toQuery();
assertThat( query )
.hasDocRefHitsAnyOrder( INDEX_NAME, DOCUMENT_1 );

// Same here. Terms are lower-cased only at query time. Because we've defined a search analyzer.
query = scope.query()
.predicate( f -> f.phrase().field( whitespaceLowercaseSearchAnalyzedField ).matching( "ONCE UPON" ) )
.toQuery();
assertThat( query )
.hasDocRefHitsAnyOrder( INDEX_NAME, DOCUMENT_1 );

// As for the first query, terms are never lower-cased, neither at write nor at query time.
// Because even if we've defined a search analyzer, we are overriding it with an analyzer in the predicate,
// since the overriding takes precedence over the search analyzer.
query = scope.query()
.predicate( f -> f.phrase().field( whitespaceLowercaseSearchAnalyzedField ).matching( "ONCE UPON" )
.analyzer( OverrideAnalysisDefinitions.ANALYZER_WHITESPACE.name ) )
.toQuery();
assertThat( query )
.hasDocRefHitsAnyOrder( INDEX_NAME, DOCUMENT_2 );
}

@Test
Expand Down Expand Up @@ -736,19 +754,22 @@ private void initData() {
document.addValue( indexMapping.analyzedStringFieldWithDslConverter.reference, PHRASE_1_TEXT_EXACT_MATCH );
document.addValue( indexMapping.whitespaceAnalyzedField.reference, PHRASE_1_TEXT_EXACT_MATCH.toLowerCase( Locale.ROOT ) );
document.addValue( indexMapping.whitespaceLowercaseAnalyzedField.reference, PHRASE_1_TEXT_EXACT_MATCH.toLowerCase( Locale.ROOT ) );
document.addValue( indexMapping.whitespaceLowercaseSearchAnalyzedField.reference, PHRASE_1_TEXT_EXACT_MATCH.toLowerCase( Locale.ROOT ) );
} );
plan.add( referenceProvider( DOCUMENT_2 ), document -> {
document.addValue( indexMapping.analyzedStringField1.reference, PHRASE_1_TEXT_SLOP_1_MATCH );
document.addValue( indexMapping.analyzedStringField2.reference, PHRASE_2_TEXT_EXACT_MATCH );
document.addValue( indexMapping.whitespaceAnalyzedField.reference, PHRASE_1_TEXT_EXACT_MATCH.toUpperCase( Locale.ROOT ) );
document.addValue( indexMapping.whitespaceLowercaseAnalyzedField.reference, PHRASE_1_TEXT_EXACT_MATCH.toUpperCase( Locale.ROOT ) );
document.addValue( indexMapping.whitespaceLowercaseSearchAnalyzedField.reference, PHRASE_1_TEXT_EXACT_MATCH.toUpperCase( Locale.ROOT ) );
} );
plan.add( referenceProvider( DOCUMENT_3 ), document -> {
document.addValue( indexMapping.analyzedStringField1.reference, PHRASE_1_TEXT_SLOP_2_MATCH );
document.addValue( indexMapping.analyzedStringField2.reference, PHRASE_3_TEXT_EXACT_MATCH );
document.addValue( indexMapping.analyzedStringField3.reference, PHRASE_1_TEXT_EXACT_MATCH );
document.addValue( indexMapping.whitespaceAnalyzedField.reference, PHRASE_1_TEXT_EXACT_MATCH );
document.addValue( indexMapping.whitespaceLowercaseAnalyzedField.reference, PHRASE_1_TEXT_EXACT_MATCH );
document.addValue( indexMapping.whitespaceLowercaseSearchAnalyzedField.reference, PHRASE_1_TEXT_EXACT_MATCH );
} );
plan.add( referenceProvider( DOCUMENT_4 ), document -> {
document.addValue( indexMapping.analyzedStringField1.reference, PHRASE_1_TEXT_SLOP_3_MATCH );
Expand Down Expand Up @@ -825,6 +846,7 @@ private static class IndexMapping {
final MainFieldModel analyzedStringFieldWithDslConverter;
final MainFieldModel whitespaceAnalyzedField;
final MainFieldModel whitespaceLowercaseAnalyzedField;
final MainFieldModel whitespaceLowercaseSearchAnalyzedField;

IndexMapping(IndexSchemaElement root) {
mapByTypeFields(
Expand Down Expand Up @@ -860,6 +882,11 @@ private static class IndexMapping {
c -> c.asString().analyzer( OverrideAnalysisDefinitions.ANALYZER_WHITESPACE_LOWERCASE.name )
)
.map( root, "whitespaceLowercaseAnalyzed" );
whitespaceLowercaseSearchAnalyzedField = MainFieldModel.mapper(
c -> c.asString().analyzer( OverrideAnalysisDefinitions.ANALYZER_WHITESPACE.name )
.searchAnalyzer( OverrideAnalysisDefinitions.ANALYZER_WHITESPACE_LOWERCASE.name )
)
.map( root, "whitespaceLowercaseSearchAnalyzed" );
}
}

Expand Down

0 comments on commit 38b9891

Please sign in to comment.