summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@oath.com>2020-01-28 12:20:20 +0100
committerGitHub <noreply@github.com>2020-01-28 12:20:20 +0100
commit03ebe582ce020cde2b6b26415f66841f2e4bc601 (patch)
treec8cbc1862d60d5ec32ddfefc4702bc9057d66c69 /config-model
parent449bb1c1ee96d24c1bb95664700c98963a12a98e (diff)
parent1949eb0aed9b8137a9ed3c0255831510d2764da6 (diff)
Merge pull request #11974 from vespa-engine/bratseth/query-command-fix
Bratseth/query command fix
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/FieldOperationContainer.java2
-rw-r--r--config-model/src/main/javacc/SDParser.jj48
-rw-r--r--config-model/src/test/derived/indexschema/index-info.cfg2
-rw-r--r--config-model/src/test/derived/indexschema/indexschema.sd5
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 {