aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/prelude/query/SameElementItem.java
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2018-05-23 23:06:18 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2018-05-23 23:07:01 +0200
commit8365add7b94a88eec13e38c473f1b688e1f2d28a (patch)
tree28703379f04ad162c414490d73b0b7cad99ca022 /container-search/src/main/java/com/yahoo/prelude/query/SameElementItem.java
parent75e72150aa9cbcf4cfd8a0028fab5615c9bd23d4 (diff)
Add SameElementItem for struct search support.
Diffstat (limited to 'container-search/src/main/java/com/yahoo/prelude/query/SameElementItem.java')
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/query/SameElementItem.java58
1 files changed, 58 insertions, 0 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/query/SameElementItem.java b/container-search/src/main/java/com/yahoo/prelude/query/SameElementItem.java
new file mode 100644
index 00000000000..a52d4dd3db3
--- /dev/null
+++ b/container-search/src/main/java/com/yahoo/prelude/query/SameElementItem.java
@@ -0,0 +1,58 @@
+// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.prelude.query;
+
+
+import com.yahoo.protect.Validator;
+
+import java.util.Iterator;
+
+/**
+ * This represents a query where all terms are required to match in the sma element id.
+ * The primary usecase is to allow efficient search in arrays and maps of struct.
+ * The common path is the field name containing the struct.
+ * @author baldersheim
+ */
+public class SameElementItem extends CompositeIndexedItem {
+
+ public SameElementItem(String commonPath) {
+ setIndexName(commonPath);
+ }
+
+ @Override
+ public String getIndexedString() {
+ StringBuilder buf = new StringBuilder();
+
+ for (Iterator<Item> i = getItemIterator(); i.hasNext();) {
+ IndexedItem indexedItem = (IndexedItem) i.next();
+
+ buf.append(indexedItem.getIndexedString());
+ if (i.hasNext()) {
+ buf.append(' ');
+ }
+ }
+ return buf.toString(); }
+
+ @Override
+ public int getNumWords() {
+ return getItemCount();
+ }
+
+ @Override
+ protected void adding(Item item) {
+ Validator.ensureInstanceOf("Child item", item, TermItem.class);
+ TermItem asTerm = (TermItem) item;
+ Validator.ensureNotNull("Struct fieldname", asTerm.getIndexName());
+ Validator.ensureNotNull("Query term", asTerm.getIndexedString());
+ Validator.ensureNonEmpty("Struct fieldname", asTerm.getIndexName());
+ Validator.ensureNonEmpty("Query term", asTerm.getIndexedString());
+ }
+ @Override
+ public ItemType getItemType() {
+ return ItemType.SAME_ELEMENT;
+ }
+
+ @Override
+ public String getName() {
+ return getItemType().toString();
+ }
+}