diff options
author | Arne Juul <arnej@verizonmedia.com> | 2020-08-10 11:57:14 +0000 |
---|---|---|
committer | Arne Juul <arnej@verizonmedia.com> | 2020-08-10 11:57:14 +0000 |
commit | 18569d25f27e901ab1fce082fe181a44f17244f2 (patch) | |
tree | f4d69d3134b07a6d4783eb9c1f02c63399d0a69c /container-search | |
parent | 84ca9c88784b358c509a63a2ec45774c5a7c2aba (diff) |
ensure connected query items are Taggable
Diffstat (limited to 'container-search')
4 files changed, 24 insertions, 2 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/query/CompositeTaggableItem.java b/container-search/src/main/java/com/yahoo/prelude/query/CompositeTaggableItem.java index b1912e4128d..dd015b5f040 100644 --- a/container-search/src/main/java/com/yahoo/prelude/query/CompositeTaggableItem.java +++ b/container-search/src/main/java/com/yahoo/prelude/query/CompositeTaggableItem.java @@ -27,6 +27,10 @@ public abstract class CompositeTaggableItem extends CompositeItem implements Tag /** See {@link TaggableItem#setConnectivity} */ public void setConnectivity(Item item, double connectivity) { + if (!(item instanceof TaggableItem)) { + throw new IllegalArgumentException("setConnectivity item must be taggable, was: " + + item.getClass() + " [" + item + "]"); + } setHasUniqueID(true); item.setHasUniqueID(true); if (connectedItem != null) { diff --git a/container-search/src/main/java/com/yahoo/prelude/query/SimpleTaggableItem.java b/container-search/src/main/java/com/yahoo/prelude/query/SimpleTaggableItem.java index 6f82f340f4b..afdc859a5b7 100644 --- a/container-search/src/main/java/com/yahoo/prelude/query/SimpleTaggableItem.java +++ b/container-search/src/main/java/com/yahoo/prelude/query/SimpleTaggableItem.java @@ -27,6 +27,10 @@ public abstract class SimpleTaggableItem extends Item implements TaggableItem { @Override public void setConnectivity(Item item, double connectivity) { + if (!(item instanceof TaggableItem)) { + throw new IllegalArgumentException("setConnectivity item must be taggable, was: " + + item.getClass() + " [" + item + "]"); + } setHasUniqueID(true); item.setHasUniqueID(true); if (connectedItem != null) { diff --git a/container-search/src/main/java/com/yahoo/prelude/query/TaggableSegmentItem.java b/container-search/src/main/java/com/yahoo/prelude/query/TaggableSegmentItem.java index 35df4bf443c..83122a0a512 100644 --- a/container-search/src/main/java/com/yahoo/prelude/query/TaggableSegmentItem.java +++ b/container-search/src/main/java/com/yahoo/prelude/query/TaggableSegmentItem.java @@ -31,6 +31,10 @@ public abstract class TaggableSegmentItem extends SegmentItem implements Taggabl /** See {@link TaggableItem#setConnectivity} */ public void setConnectivity(Item item, double connectivity) { + if (!(item instanceof TaggableItem)) { + throw new IllegalArgumentException("setConnectivity item must be taggable, was: " + + item.getClass() + " [" + item + "]"); + } setHasUniqueID(true); item.setHasUniqueID(true); if (connectedItem != null) { 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 76ea7fb11a8..267880fc97a 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 @@ -667,9 +667,19 @@ abstract class StructuredParser extends AbstractParser { int items = composite.items().size(); if (items < 2) return; Item nextToLast = composite.items().get(items - 2); - Item last = composite.items().get(items - 1); + if (nextToLast instanceof AndSegmentItem) { + var subItems = ((AndSegmentItem) nextToLast).items(); + nextToLast = subItems.get(subItems.size() - 1); + } if ( ! (nextToLast instanceof TermItem)) return; - ((TermItem)nextToLast).setConnectivity(last, 1); + Item last = composite.items().get(items - 1); + if (last instanceof AndSegmentItem) { + last = ((AndSegmentItem) last).items().get(0); + } + if (last instanceof TaggableItem) { + TermItem t1 = (TermItem) nextToLast; + t1.setConnectivity(last, 1); + } } private boolean addStartMarking() { |