summaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorArne Juul <arnej@verizonmedia.com>2020-08-10 11:57:14 +0000
committerArne Juul <arnej@verizonmedia.com>2020-08-10 11:57:14 +0000
commit18569d25f27e901ab1fce082fe181a44f17244f2 (patch)
treef4d69d3134b07a6d4783eb9c1f02c63399d0a69c /container-search
parent84ca9c88784b358c509a63a2ec45774c5a7c2aba (diff)
ensure connected query items are Taggable
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/query/CompositeTaggableItem.java4
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/query/SimpleTaggableItem.java4
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/query/TaggableSegmentItem.java4
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/query/parser/StructuredParser.java14
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() {