diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2018-05-23 23:06:18 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2018-05-23 23:07:01 +0200 |
commit | 8365add7b94a88eec13e38c473f1b688e1f2d28a (patch) | |
tree | 28703379f04ad162c414490d73b0b7cad99ca022 /container-search/src/main/java/com/yahoo/prelude/query/SameElementItem.java | |
parent | 75e72150aa9cbcf4cfd8a0028fab5615c9bd23d4 (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.java | 58 |
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(); + } +} |