summaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2019-06-27 20:21:21 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2019-06-27 20:21:21 +0200
commitaeb03fa326aafd0f92f3a18e4b04846823af3d4f (patch)
treed378013688f7751f65234953cee3524a8d91a87d /container-search
parent59707e415eedbf630d5eda986545909e36ceb404 (diff)
A single element under sameElement operator can be pulled out to avoid the sameElement operator.
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/query/QueryCanonicalizer.java11
-rw-r--r--container-search/src/test/java/com/yahoo/search/yql/YqlParserTestCase.java2
2 files changed, 10 insertions, 3 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/query/QueryCanonicalizer.java b/container-search/src/main/java/com/yahoo/prelude/query/QueryCanonicalizer.java
index 31e69e5b7cd..2fbda1a9c32 100644
--- a/container-search/src/main/java/com/yahoo/prelude/query/QueryCanonicalizer.java
+++ b/container-search/src/main/java/com/yahoo/prelude/query/QueryCanonicalizer.java
@@ -83,9 +83,16 @@ public class QueryCanonicalizer {
parentIterator.remove();
if (composite.getItemCount() == 1 && ! (composite instanceof NonReducibleCompositeItem)) {
+ Item child = composite.getItem(0);
if (composite instanceof PhraseItem || composite instanceof PhraseSegmentItem)
- composite.getItem(0).setWeight(composite.getWeight());
- parentIterator.set(composite.getItem(0));
+ child.setWeight(composite.getWeight());
+ parentIterator.set(child);
+ }
+ if ((composite.getItemCount() == 1) && (composite instanceof SameElementItem)) {
+ SameElementItem sameElement = (SameElementItem) composite;
+ WordItem child = (WordItem) sameElement.getItem(0);
+ child.setIndexName(sameElement.getFieldName() + "." + child.getIndexName());
+ parentIterator.set(child);
}
return CanonicalizationResult.success();
diff --git a/container-search/src/test/java/com/yahoo/search/yql/YqlParserTestCase.java b/container-search/src/test/java/com/yahoo/search/yql/YqlParserTestCase.java
index 70d50b23bed..00a17f963c6 100644
--- a/container-search/src/test/java/com/yahoo/search/yql/YqlParserTestCase.java
+++ b/container-search/src/test/java/com/yahoo/search/yql/YqlParserTestCase.java
@@ -303,7 +303,7 @@ public class YqlParserTestCase {
assertCanonicalParse("select foo from bar where baz contains sameElement(key contains \"a\", value.f2 = 10);",
"baz:{key:a value.f2:10}");
assertCanonicalParse("select foo from bar where baz contains sameElement(key contains \"a\");",
- "baz:{key:a}");
+ "baz.key:a");
}
@Test