diff options
author | Jon Bratseth <bratseth@verizonmedia.com> | 2020-01-28 19:22:40 +0100 |
---|---|---|
committer | Jon Bratseth <bratseth@verizonmedia.com> | 2020-01-28 19:22:40 +0100 |
commit | b3580975c872bb20fc6027dca0b97d6d9d022962 (patch) | |
tree | 28f2f9c54faa88b0b3155211265065d8a6c111fe | |
parent | 2df0c12a503a0fdff8da459618801fb5037a06f0 (diff) |
Change fieldset query-command to add, not override commands
The logic in FieldSet stated that any explicit query-command
will deactivate all the standard derived commands. That is
inconsistent with query-command on fields, not mentioned in
the doc, and will generally break things.
This changes to the normal behavior where query-commands are
additive.
7 files changed, 79 insertions, 18 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/derived/IndexInfo.java b/config-model/src/main/java/com/yahoo/searchdefinition/derived/IndexInfo.java index 02b2a383318..032f7f58e2a 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/derived/IndexInfo.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/derived/IndexInfo.java @@ -286,16 +286,8 @@ public class IndexInfo extends Derived implements IndexInfoConfig.Producer { // TODO: Move this to the FieldSetSettings processor (and rename it) as that already has to look at this. private void addFieldSetCommands(IndexInfoConfig.Indexinfo.Builder iiB, FieldSet fieldSet) { - // Explicit query commands on the field set, overrides everything. - if (!fieldSet.queryCommands().isEmpty()) { - for (String qc : fieldSet.queryCommands()) { - iiB.command( - new IndexInfoConfig.Indexinfo.Command.Builder() - .indexname(fieldSet.getName()) - .command(qc)); - } - return; - } + for (String qc : fieldSet.queryCommands()) + iiB.command(new IndexInfoConfig.Indexinfo.Command.Builder().indexname(fieldSet.getName()).command(qc)); boolean anyIndexing = false; boolean anyAttributing = false; boolean anyLowerCasing = false; diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/document/FieldSet.java b/config-model/src/main/java/com/yahoo/searchdefinition/document/FieldSet.java index 55dedc4a1d7..22424286ef9 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/document/FieldSet.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/document/FieldSet.java @@ -25,10 +25,7 @@ public class FieldSet { public FieldSet addFieldName(String field) { fieldNames.add(field); return this; } public Set<String> getFieldNames() { return fieldNames; } public Set<ImmutableSDField> fields() { return fields; } - - public Set<String> queryCommands() { - return queryCommands; - } + public Set<String> queryCommands() { return queryCommands; } public void setMatching(Matching matching) { this.matching = matching; diff --git a/config-model/src/main/javacc/SDParser.jj b/config-model/src/main/javacc/SDParser.jj index 7543e3f030c..3c09a521715 100644 --- a/config-model/src/main/javacc/SDParser.jj +++ b/config-model/src/main/javacc/SDParser.jj @@ -673,11 +673,11 @@ void fieldSet(Search search) : // 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); + 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()); + ((SDField)setting).applyOperations(); + search.fieldSets().userFieldSets().get(setName).setMatching(((SDField)setting).getMatching()); } } } diff --git a/config-model/src/test/derived/fieldset2/index-info.cfg b/config-model/src/test/derived/fieldset2/index-info.cfg new file mode 100644 index 00000000000..7c3c1c448db --- /dev/null +++ b/config-model/src/test/derived/fieldset2/index-info.cfg @@ -0,0 +1,37 @@ +indexinfo[].name "test" +indexinfo[].command[].indexname "sddocname" +indexinfo[].command[].command "index" +indexinfo[].command[].indexname "sddocname" +indexinfo[].command[].command "word" +indexinfo[].command[].indexname "field1" +indexinfo[].command[].command "index" +indexinfo[].command[].indexname "field1" +indexinfo[].command[].command "lowercase" +indexinfo[].command[].indexname "field1" +indexinfo[].command[].command "stem:BEST" +indexinfo[].command[].indexname "field1" +indexinfo[].command[].command "normalize" +indexinfo[].command[].indexname "field1" +indexinfo[].command[].command "plain-tokens" +indexinfo[].command[].indexname "field2" +indexinfo[].command[].command "index" +indexinfo[].command[].indexname "field2" +indexinfo[].command[].command "lowercase" +indexinfo[].command[].indexname "field2" +indexinfo[].command[].command "stem:BEST" +indexinfo[].command[].indexname "field2" +indexinfo[].command[].command "normalize" +indexinfo[].command[].indexname "field2" +indexinfo[].command[].command "plain-tokens" +indexinfo[].command[].indexname "default" +indexinfo[].command[].command "phrase-segmenting false" +indexinfo[].command[].indexname "default" +indexinfo[].command[].command "lowercase" +indexinfo[].command[].indexname "default" +indexinfo[].command[].command "index" +indexinfo[].command[].indexname "default" +indexinfo[].command[].command "plain-tokens" +indexinfo[].command[].indexname "default" +indexinfo[].command[].command "stem:BEST" +indexinfo[].command[].indexname "default" +indexinfo[].command[].command "normalize" diff --git a/config-model/src/test/derived/fieldset2/test.sd b/config-model/src/test/derived/fieldset2/test.sd new file mode 100644 index 00000000000..7606a5d16b2 --- /dev/null +++ b/config-model/src/test/derived/fieldset2/test.sd @@ -0,0 +1,20 @@ +search test { + + document test { + + field field1 type string { + indexing: index + } + + field field2 type string { + indexing: index + } + + } + + fieldset default { + fields: field1, field2 + query-command: "phrase-segmenting false" + } + +} diff --git a/config-model/src/test/derived/indexschema/index-info.cfg b/config-model/src/test/derived/indexschema/index-info.cfg index 25c7e9db4b0..65818e088f5 100644 --- a/config-model/src/test/derived/indexschema/index-info.cfg +++ b/config-model/src/test/derived/indexschema/index-info.cfg @@ -44,9 +44,9 @@ indexinfo[].command[].command "normalize" 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[].command "literal-boost" indexinfo[].command[].indexname "pos.x" indexinfo[].command[].command "index" indexinfo[].command[].indexname "pos.x" @@ -309,6 +309,16 @@ indexinfo[].command[].indexname "exactexplicit" indexinfo[].command[].command "exact ARNOLD" indexinfo[].command[].indexname "exactexplicit" indexinfo[].command[].command "dynteaser" +indexinfo[].command[].indexname "exactexplicit" +indexinfo[].command[].command "lowercase" +indexinfo[].command[].indexname "exactexplicit" +indexinfo[].command[].command "index" +indexinfo[].command[].indexname "exactexplicit" +indexinfo[].command[].command "plain-tokens" +indexinfo[].command[].indexname "exactexplicit" +indexinfo[].command[].command "stem:BEST" +indexinfo[].command[].indexname "exactexplicit" +indexinfo[].command[].command "normalize" indexinfo[].command[].indexname "exactexplicit2" indexinfo[].command[].command "lowercase" indexinfo[].command[].indexname "exactexplicit2" diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/derived/ExportingTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/derived/ExportingTestCase.java index 61065cd4bcc..3fc05d789f6 100644 --- a/config-model/src/test/java/com/yahoo/searchdefinition/derived/ExportingTestCase.java +++ b/config-model/src/test/java/com/yahoo/searchdefinition/derived/ExportingTestCase.java @@ -120,6 +120,11 @@ public class ExportingTestCase extends AbstractExportingTestCase { } @Test + public void testFieldSet2() throws IOException, ParseException { + assertCorrectDeriving("fieldset2"); + } + + @Test public void testIndexinfoFieldsets() throws IOException, ParseException { assertCorrectDeriving("indexinfo_fieldsets"); } |