diff options
author | Jon Bratseth <bratseth@oath.com> | 2020-01-28 12:20:20 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-28 12:20:20 +0100 |
commit | 03ebe582ce020cde2b6b26415f66841f2e4bc601 (patch) | |
tree | c8cbc1862d60d5ec32ddfefc4702bc9057d66c69 /config-model | |
parent | 449bb1c1ee96d24c1bb95664700c98963a12a98e (diff) | |
parent | 1949eb0aed9b8137a9ed3c0255831510d2764da6 (diff) |
Merge pull request #11974 from vespa-engine/bratseth/query-command-fix
Bratseth/query command fix
Diffstat (limited to 'config-model')
4 files changed, 34 insertions, 23 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 52665ff56a9..7543e3f030c 100644 --- a/config-model/src/main/javacc/SDParser.jj +++ b/config-model/src/main/javacc/SDParser.jj @@ -651,27 +651,35 @@ void field(SDDocumentType document, Search search) : void fieldSet(Search search) : { - String name; -} -{ - <FIELDSET> name = identifier() lbrace() - (fieldSetItem(name, search)(<NL>)*)+ - <RBRACE> -} - -void fieldSetItem(String setName, Search search) : -{ + String setName; String field; String queryCommand; - SDField matchSettings = new SDField(setName, DataType.STRING); // match etc for fieldset represented as SDField or ease of parsing + List queryCommands = new ArrayList(); + FieldOperationContainer matchSetting; + List matchSettings = new ArrayList(); } { - ( <FIELDS><COLON> field=identifier() { search.fieldSets().addUserFieldSetItem(setName, field); } - ( <COMMA> field=identifier() { search.fieldSets().addUserFieldSetItem(setName, field); } )* ) - | - ( <QUERYCOMMAND> <COLON> (queryCommand = identifierWithDash() | queryCommand = quotedString())) { search.fieldSets().userFieldSets().get(setName).queryCommands().add(queryCommand);} - | - ( match(matchSettings) ) { matchSettings.applyOperations(); search.fieldSets().userFieldSets().get(setName).setMatching(matchSettings.getMatching());} + <FIELDSET> setName = identifier() lbrace() + (( + ( <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); } + | + ( 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()); + } + } } /** @@ -1531,7 +1539,7 @@ void queryCommand(FieldOperationContainer container) : QueryCommandOperation field = new QueryCommandOperation(); } { - <QUERYCOMMAND> <COLON> command = identifierWithDash() + <QUERYCOMMAND> <COLON> ( command = identifierWithDash() | command = quotedString() ) { field.addQueryCommand(command); container.addOperation(field); @@ -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/index-info.cfg b/config-model/src/test/derived/indexschema/index-info.cfg index a83ec45c5e9..25c7e9db4b0 100644 --- a/config-model/src/test/derived/indexschema/index-info.cfg +++ b/config-model/src/test/derived/indexschema/index-info.cfg @@ -45,6 +45,8 @@ indexinfo[].command[].indexname "sd" indexinfo[].command[].command "plain-tokens" indexinfo[].command[].indexname "sd" indexinfo[].command[].command "literal-boost" +indexinfo[].command[].command "phrase-segmenting false" +indexinfo[].command[].indexname "sd" indexinfo[].command[].indexname "pos.x" indexinfo[].command[].command "index" indexinfo[].command[].indexname "pos.x" diff --git a/config-model/src/test/derived/indexschema/indexschema.sd b/config-model/src/test/derived/indexschema/indexschema.sd index 49f0f7dfca6..01f552a8c32 100644 --- a/config-model/src/test/derived/indexschema/indexschema.sd +++ b/config-model/src/test/derived/indexschema/indexschema.sd @@ -24,6 +24,7 @@ search indexschema { field sd type string { indexing: index rank:literal + query-command: "phrase-segmenting false" } field pos type position { indexing: attribute @@ -130,17 +131,17 @@ search indexschema { } fieldset exactexplicit { - fields:sa, sb query-command: "exact ARNOLD" + fields:sa, sb query-command: dynteaser } fieldset exactexplicit2 { - fields:sc, sd match { exact exact-terminator: "Arnold" } + fields:sc, sd } fieldset gram { |