diff options
Diffstat (limited to 'config-model')
3 files changed, 17 insertions, 9 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/FieldOperationContainer.java b/config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/FieldOperationContainer.java index 09e8b3ccdfa..ab9148992e0 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/FieldOperationContainer.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/FieldOperationContainer.java @@ -11,7 +11,7 @@ public interface FieldOperationContainer { /** Adds an operation */ void addOperation(FieldOperation op); - /** Apply all operations. Operations must be sorted in thjeir natural order before applying each operation. */ + /** Apply all operations. Operations must be sorted in their natural order before applying each operation. */ void applyOperations(SDField field); String getName(); diff --git a/config-model/src/main/javacc/SDParser.jj b/config-model/src/main/javacc/SDParser.jj index 9b49fd50749..7543e3f030c 100644 --- a/config-model/src/main/javacc/SDParser.jj +++ b/config-model/src/main/javacc/SDParser.jj @@ -655,22 +655,30 @@ void fieldSet(Search search) : String field; String queryCommand; List queryCommands = new ArrayList(); - SDField matchSettings; + FieldOperationContainer matchSetting; + List matchSettings = new ArrayList(); } { - <FIELDSET> setName = identifier() lbrace() { matchSettings = new SDField(setName, DataType.STRING); } + <FIELDSET> setName = identifier() lbrace() (( - ( <FIELDS><COLON> field=identifier() { search.fieldSets().addUserFieldSetItem(setName, field); } - ( <COMMA> field=identifier() { search.fieldSets().addUserFieldSetItem(setName, field); } )* ) + ( <FIELDS><COLON> field = identifier() { search.fieldSets().addUserFieldSetItem(setName, field); } + ( <COMMA> field = identifier() { search.fieldSets().addUserFieldSetItem(setName, field); } )* ) | ( <QUERYCOMMAND> <COLON> (queryCommand = identifierWithDash() | queryCommand = quotedString())) { queryCommands.add(queryCommand); } | - ( match(matchSettings) ) { matchSettings.applyOperations(); search.fieldSets().userFieldSets().get(setName).setMatching(matchSettings.getMatching());} + ( matchSetting = match(new SDField(setName, DataType.STRING)) ) { matchSettings.add(matchSetting); } )(<NL>)*)+ <RBRACE> { + // Apply settings after parsing since all user field items must be set first + for (Object command : queryCommands) search.fieldSets().userFieldSets().get(setName).queryCommands().add((String)command); + + for (Object setting : matchSettings) { + ((SDField)setting).applyOperations(); + search.fieldSets().userFieldSets().get(setName).setMatching(((SDField)setting).getMatching()); + } } } @@ -1551,11 +1559,11 @@ void alias(FieldOperationContainer container) : } } -Object match(FieldOperationContainer field) : { } +FieldOperationContainer match(FieldOperationContainer field) : { } { <MATCH> ( (<COLON> matchType(field)) | (lbrace() (matchItem(field) (<NL>)*)* <RBRACE>) ) - { return null; } + { return field; } } /** diff --git a/config-model/src/test/derived/indexschema/indexschema.sd b/config-model/src/test/derived/indexschema/indexschema.sd index 010eb8ec3e8..01f552a8c32 100644 --- a/config-model/src/test/derived/indexschema/indexschema.sd +++ b/config-model/src/test/derived/indexschema/indexschema.sd @@ -137,11 +137,11 @@ search indexschema { } fieldset exactexplicit2 { - fields:sc, sd match { exact exact-terminator: "Arnold" } + fields:sc, sd } fieldset gram { |