diff options
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 | 27 |
1 files changed, 25 insertions, 2 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 index 70e9357e7cf..3d596cc7d34 100644 --- a/container-search/src/main/java/com/yahoo/prelude/query/SameElementItem.java +++ b/container-search/src/main/java/com/yahoo/prelude/query/SameElementItem.java @@ -52,9 +52,32 @@ public class SameElementItem extends CompositeItem { Validator.ensureNonEmpty("Struct fieldname", asTerm.getIndexName()); Validator.ensureNonEmpty("Query term", asTerm.getIndexedString()); Validator.ensure("Struct fieldname starts with '" + getFieldName() + ".'", - !asTerm.getIndexName().startsWith(fieldName+".")); - item.setIndexName(fieldName + '.' + asTerm.getIndexName()); + !asTerm.getIndexName().startsWith(fieldName+".") || (item.getParent() != null)); + super.adding(item); } + + private void expandChild(Item item) { + item.setIndexName(fieldName + '.' + ((TermItem)item).getIndexName()); + } + @Override + public void addItem(int index, Item item) { + super.addItem(index, item); + expandChild(item); + } + + @Override + public void addItem(Item item) { + super.addItem(item); + expandChild(item); + } + + @Override + public Item setItem(int index, Item item) { + Item prev = super.setItem(index, item); + expandChild(item); + return prev; + } + @Override public ItemType getItemType() { return ItemType.SAME_ELEMENT; |