diff options
author | Arne H Juul <arnej@yahooinc.com> | 2022-04-07 12:43:55 +0000 |
---|---|---|
committer | Arne H Juul <arnej@yahooinc.com> | 2022-04-07 13:03:56 +0000 |
commit | 1550a72ec2fc0f9691bd3682e9e4ecd4dc14e757 (patch) | |
tree | b94209b24cf0a88441050a92c913f99c63f3a2b9 /container-search/src/main/java/com/yahoo/prelude | |
parent | bc0728aa6991867affbf369dc92ad8d3e28b0f74 (diff) |
handle index names with > 2 dot-separated "words"
* this is necessary when searching in map of struct, where
the index will be "field.value.subfield" -> 3 "words".
Diffstat (limited to 'container-search/src/main/java/com/yahoo/prelude')
-rw-r--r-- | container-search/src/main/java/com/yahoo/prelude/query/parser/StructuredParser.java | 12 |
1 files changed, 4 insertions, 8 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/query/parser/StructuredParser.java b/container-search/src/main/java/com/yahoo/prelude/query/parser/StructuredParser.java index a35ad91acbd..54a6e5b6e90 100644 --- a/container-search/src/main/java/com/yahoo/prelude/query/parser/StructuredParser.java +++ b/container-search/src/main/java/com/yahoo/prelude/query/parser/StructuredParser.java @@ -160,8 +160,8 @@ abstract class StructuredParser extends AbstractParser { firstWord.add(tokens.next()); } - if (tokens.currentIsNoIgnore(DOT)) { - tokens.skip(); + while (tokens.currentIsNoIgnore(DOT)) { + secondWord.add(tokens.next()); if (tokens.currentIsNoIgnore(WORD) || tokens.currentIsNoIgnore(NUMBER)) { secondWord.add(tokens.next()); } else { @@ -177,11 +177,7 @@ abstract class StructuredParser extends AbstractParser { if ( ! tokens.skipNoIgnore(COLON)) return null; - if (secondWord.size() == 0) { - item = concatenate(firstWord); - } else { - item = concatenate(firstWord) + "." + concatenate(secondWord); - } + item = concatenate(firstWord) + concatenate(secondWord); item = indexFacts.getCanonicName(item); @@ -395,7 +391,7 @@ abstract class StructuredParser extends AbstractParser { if ( ! tokens.currentIs(NUMBER)) return null; item = new IntItem(">" + (negative ? "-" : "") + tokens.next() + decimalPart(), true); - item.setOrigin(new Substring(initial.substring.start, tokens.currentNoIgnore().substring.start, + item.setOrigin(new Substring(initial.substring.start, tokens.currentNoIgnore().substring.start, initial.getSubstring().getSuperstring())); // XXX: Unsafe end? return item; } finally { |