aboutsummaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@verizonmedia.com>2019-06-28 06:35:11 -0500
committerJon Bratseth <bratseth@verizonmedia.com>2019-06-28 06:35:11 -0500
commite1010883fb684c1e941cf2d49778c86e179ecb9e (patch)
treea8c3679859dc548159ca0955556674ca311fa0c9 /container-search
parentb03399fca13b0aa048e71a0f5a609f439ace2253 (diff)
Move extract logic to the relevant items
Diffstat (limited to 'container-search')
-rw-r--r--container-search/abi-spec.json2
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/query/CompositeItem.java5
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/query/PhraseItem.java8
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/query/PhraseSegmentItem.java11
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/query/QueryCanonicalizer.java8
5 files changed, 25 insertions, 9 deletions
diff --git a/container-search/abi-spec.json b/container-search/abi-spec.json
index b74dd1e3e95..357e945aea8 100644
--- a/container-search/abi-spec.json
+++ b/container-search/abi-spec.json
@@ -946,6 +946,7 @@
"public void addItem(com.yahoo.prelude.query.Item)",
"public void addItem(int, com.yahoo.prelude.query.Item)",
"public com.yahoo.prelude.query.Item setItem(int, com.yahoo.prelude.query.Item)",
+ "public java.util.Optional extractSingleChild()",
"public com.yahoo.prelude.query.WordItem getWordItem(int)",
"public com.yahoo.prelude.query.BlockItem getBlockItem(int)",
"protected void encodeThis(java.nio.ByteBuffer)",
@@ -976,6 +977,7 @@
"public void setIndexName(java.lang.String)",
"public void setWeight(int)",
"public void addItem(com.yahoo.prelude.query.Item)",
+ "public java.util.Optional extractSingleChild()",
"public com.yahoo.prelude.query.WordItem getWordItem(int)",
"protected void encodeThis(java.nio.ByteBuffer)",
"public int encode(java.nio.ByteBuffer)",
diff --git a/container-search/src/main/java/com/yahoo/prelude/query/CompositeItem.java b/container-search/src/main/java/com/yahoo/prelude/query/CompositeItem.java
index 4bc15d3c897..64f759dcf9c 100644
--- a/container-search/src/main/java/com/yahoo/prelude/query/CompositeItem.java
+++ b/container-search/src/main/java/com/yahoo/prelude/query/CompositeItem.java
@@ -381,8 +381,9 @@ public abstract class CompositeItem extends Item {
}
/**
- * Will return its single child if itself can safely be ommitted.
- * @return A valid Item or empty Optional if it can not be done.
+ * Will return its single child if itself can safely be omitted.
+ *
+ * @return a valid Item or empty Optional if it can not be done
*/
public Optional<Item> extractSingleChild() {
return getItemCount() == 1 ? Optional.of(getItem(0)) : Optional.empty();
diff --git a/container-search/src/main/java/com/yahoo/prelude/query/PhraseItem.java b/container-search/src/main/java/com/yahoo/prelude/query/PhraseItem.java
index 26da5eec7eb..4de0af1f408 100644
--- a/container-search/src/main/java/com/yahoo/prelude/query/PhraseItem.java
+++ b/container-search/src/main/java/com/yahoo/prelude/query/PhraseItem.java
@@ -5,6 +5,7 @@ import com.yahoo.prelude.query.textualrepresentation.Discloser;
import java.nio.ByteBuffer;
import java.util.Iterator;
+import java.util.Optional;
/**
* A term which contains a phrase - a collection of word terms
@@ -127,6 +128,13 @@ public class PhraseItem extends CompositeIndexedItem {
}
}
+ @Override
+ public Optional<Item> extractSingleChild() {
+ Optional<Item> extracted = super.extractSingleChild();
+ extracted.ifPresent(e -> e.setWeight(this.getWeight()));
+ return extracted;
+ }
+
private void addIndexedItem(IndexedItem word) {
word.setIndexName(this.getIndexName());
super.addItem((Item) word);
diff --git a/container-search/src/main/java/com/yahoo/prelude/query/PhraseSegmentItem.java b/container-search/src/main/java/com/yahoo/prelude/query/PhraseSegmentItem.java
index a19a6e53963..53a57a968f5 100644
--- a/container-search/src/main/java/com/yahoo/prelude/query/PhraseSegmentItem.java
+++ b/container-search/src/main/java/com/yahoo/prelude/query/PhraseSegmentItem.java
@@ -5,6 +5,7 @@ import com.yahoo.prelude.query.textualrepresentation.Discloser;
import java.nio.ByteBuffer;
import java.util.Iterator;
+import java.util.Optional;
/**
@@ -55,10 +56,12 @@ public class PhraseSegmentItem extends IndexedSegmentItem {
super(rawWord, current, isFromQuery, stemmed, substring);
}
+ @Override
public ItemType getItemType() {
return ItemType.PHRASE;
}
+ @Override
public String getName() {
return "SPHRASE";
}
@@ -87,6 +90,7 @@ public class PhraseSegmentItem extends IndexedSegmentItem {
*
* @throws IllegalArgumentException if the given item is not a WordItem or PhraseItem
*/
+ @Override
public void addItem(Item item) {
if (item instanceof WordItem) {
addWordItem((WordItem) item);
@@ -95,6 +99,13 @@ public class PhraseSegmentItem extends IndexedSegmentItem {
}
}
+ @Override
+ public Optional<Item> extractSingleChild() {
+ Optional<Item> extracted = super.extractSingleChild();
+ extracted.ifPresent(e -> e.setWeight(this.getWeight()));
+ return extracted;
+ }
+
private void addWordItem(WordItem word) {
word.setIndexName(this.getIndexName());
super.addItem(word);
diff --git a/container-search/src/main/java/com/yahoo/prelude/query/QueryCanonicalizer.java b/container-search/src/main/java/com/yahoo/prelude/query/QueryCanonicalizer.java
index 23030abe102..88bae76b26d 100644
--- a/container-search/src/main/java/com/yahoo/prelude/query/QueryCanonicalizer.java
+++ b/container-search/src/main/java/com/yahoo/prelude/query/QueryCanonicalizer.java
@@ -85,17 +85,11 @@ public class QueryCanonicalizer {
if (composite.getItemCount() == 0)
parentIterator.remove();
- composite.extractSingleChild().ifPresent( (Item child) -> reduce(composite, parentIterator, child));
+ composite.extractSingleChild().ifPresent(extractedChild -> parentIterator.set(extractedChild));
return CanonicalizationResult.success();
}
- private static void reduce(CompositeItem composite, ListIterator<Item> parentIterator, Item child) {
- if (composite instanceof PhraseItem || composite instanceof PhraseSegmentItem)
- child.setWeight(composite.getWeight());
- parentIterator.set(child);
- }
-
private static void collapseLevels(CompositeItem composite) {
if (composite instanceof RankItem || composite instanceof NotItem) {
collapseLevels(composite, composite.getItemIterator()); // collapse the first item only