summaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/prelude
diff options
context:
space:
mode:
Diffstat (limited to 'container-search/src/main/java/com/yahoo/prelude')
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/query/Item.java8
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/query/PureWeightedInteger.java11
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/query/PureWeightedItem.java14
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/query/PureWeightedString.java11
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/query/WeightedSetItem.java22
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/query/textualrepresentation/TextualQueryRepresentation.java185
6 files changed, 135 insertions, 116 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/query/Item.java b/container-search/src/main/java/com/yahoo/prelude/query/Item.java
index 47efed323a9..0ba107e6e8e 100644
--- a/container-search/src/main/java/com/yahoo/prelude/query/Item.java
+++ b/container-search/src/main/java/com/yahoo/prelude/query/Item.java
@@ -469,7 +469,7 @@ public abstract class Item implements Cloneable {
public void disclose(Discloser discloser) {
discloser.addProperty("connectivity", connectivity);
- discloser.addProperty("connectedItem", connectedItem); //reference
+ discloser.addProperty("connectedItem", connectedItem); // reference
discloser.addProperty("creator", creator);
discloser.addProperty("explicitSignificance", explicitSignificance);
@@ -478,12 +478,10 @@ public abstract class Item implements Cloneable {
discloser.addProperty("significance", significance);
discloser.addProperty("weight", weight);
- if (label != null) {
+ if (label != null)
discloser.addProperty("label", label);
- }
- if (hasUniqueID) {
+ if (hasUniqueID)
discloser.addProperty("uniqueID", uniqueID);
- }
}
public boolean isFromSpecialToken() {
diff --git a/container-search/src/main/java/com/yahoo/prelude/query/PureWeightedInteger.java b/container-search/src/main/java/com/yahoo/prelude/query/PureWeightedInteger.java
index bf8fb2c7d9e..6bd8a8dd23e 100644
--- a/container-search/src/main/java/com/yahoo/prelude/query/PureWeightedInteger.java
+++ b/container-search/src/main/java/com/yahoo/prelude/query/PureWeightedInteger.java
@@ -1,12 +1,13 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.prelude.query;
+import com.yahoo.prelude.query.textualrepresentation.Discloser;
+
import java.nio.ByteBuffer;
import java.util.Objects;
/**
- * An int item which cannot provide its own index (field) name, but will always query the index
- * specified by the parent item it is added to.
+ * An integer item which only consists of a value and weight.
*
* @author baldersheim
*/
@@ -59,4 +60,10 @@ public class PureWeightedInteger extends PureWeightedItem {
return Objects.hash(super.hashCode(), value);
}
+ @Override
+ public void disclose(Discloser discloser) {
+ super.disclose(discloser);
+ discloser.setValue(value);
+ }
+
}
diff --git a/container-search/src/main/java/com/yahoo/prelude/query/PureWeightedItem.java b/container-search/src/main/java/com/yahoo/prelude/query/PureWeightedItem.java
index cf7cf87434c..d7dc2781b5a 100644
--- a/container-search/src/main/java/com/yahoo/prelude/query/PureWeightedItem.java
+++ b/container-search/src/main/java/com/yahoo/prelude/query/PureWeightedItem.java
@@ -1,14 +1,17 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.prelude.query;
+import com.yahoo.prelude.query.textualrepresentation.Discloser;
+
import java.nio.ByteBuffer;
/**
- * An item which cannot provide its own index (field) name, but will always query the index
- * specified by the parent item it is added to.
+ * A word item which only consists of a value and weight, and gets other properties
+ * such as the index to query from ther parent item.
+ *
* It's more efficient to use pure items where possible instead of
* {@link TermItem} children ({@link WordItem}, {@link IntItem})
- * who each carry their own index name.
+ * which may carry many auxiliary properties.
*
* @author baldersheim
*/
@@ -40,4 +43,9 @@ public abstract class PureWeightedItem extends Item {
buffer.append(':').append(getWeight());
}
+ @Override
+ public void disclose(Discloser discloser) {
+ discloser.addProperty("weight", getWeight());
+ }
+
}
diff --git a/container-search/src/main/java/com/yahoo/prelude/query/PureWeightedString.java b/container-search/src/main/java/com/yahoo/prelude/query/PureWeightedString.java
index 58171070678..da736d0adf6 100644
--- a/container-search/src/main/java/com/yahoo/prelude/query/PureWeightedString.java
+++ b/container-search/src/main/java/com/yahoo/prelude/query/PureWeightedString.java
@@ -1,12 +1,13 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.prelude.query;
+import com.yahoo.prelude.query.textualrepresentation.Discloser;
+
import java.nio.ByteBuffer;
import java.util.Objects;
/**
- * A word item which cannot provide its own index (field) name, but will always query the index
- * specified by the parent item it is added to.
+ * A word item which only consists of a value and weight.
*
* @author baldersheim
*/
@@ -60,4 +61,10 @@ public class PureWeightedString extends PureWeightedItem {
return Objects.hash(super.hashCode(), value);
}
+ @Override
+ public void disclose(Discloser discloser) {
+ super.disclose(discloser);
+ discloser.setValue(value);
+ }
+
}
diff --git a/container-search/src/main/java/com/yahoo/prelude/query/WeightedSetItem.java b/container-search/src/main/java/com/yahoo/prelude/query/WeightedSetItem.java
index d5ca15f10b9..e75a8417328 100644
--- a/container-search/src/main/java/com/yahoo/prelude/query/WeightedSetItem.java
+++ b/container-search/src/main/java/com/yahoo/prelude/query/WeightedSetItem.java
@@ -138,11 +138,8 @@ public class WeightedSetItem extends SimpleTaggableItem {
public void disclose(Discloser discloser) {
super.disclose(discloser);
discloser.addProperty("index", indexName);
- for (Map.Entry<Object, Integer> entry : set.entrySet()) {
- WordItem subitem = new WordItem(entry.getKey().toString(), indexName);
- subitem.setWeight(entry.getValue());
- discloser.addChild(subitem);
- }
+ for (Map.Entry<Object, Integer> entry : set.entrySet())
+ discloser.addChild(asItem(entry));
}
@Override
@@ -150,17 +147,20 @@ public class WeightedSetItem extends SimpleTaggableItem {
encodeThis(buffer);
int itemCount = 1;
for (Map.Entry<Object, Integer> entry : set.entrySet()) {
- Object key = entry.getKey();
- if (key instanceof Long) {
- new PureWeightedInteger((Long)key, entry.getValue()).encode(buffer);
- } else {
- new PureWeightedString(key.toString(), entry.getValue()).encode(buffer);
- }
+ asItem(entry).encode(buffer);
itemCount++;
}
return itemCount;
}
+ private PureWeightedItem asItem(Map.Entry<Object, Integer> entry) {
+ Object key = entry.getKey();
+ if (key instanceof Long)
+ return new PureWeightedInteger((Long)key, entry.getValue());
+ else
+ return new PureWeightedString(key.toString(), entry.getValue());
+ }
+
@Override
protected void encodeThis(ByteBuffer buffer) {
super.encodeThis(buffer);
diff --git a/container-search/src/main/java/com/yahoo/prelude/query/textualrepresentation/TextualQueryRepresentation.java b/container-search/src/main/java/com/yahoo/prelude/query/textualrepresentation/TextualQueryRepresentation.java
index 4c0c7501ba1..9efdea4dfd8 100644
--- a/container-search/src/main/java/com/yahoo/prelude/query/textualrepresentation/TextualQueryRepresentation.java
+++ b/container-search/src/main/java/com/yahoo/prelude/query/textualrepresentation/TextualQueryRepresentation.java
@@ -20,11 +20,102 @@ import java.util.regex.Pattern;
*/
public class TextualQueryRepresentation {
- private Map<Item, Integer> itemReferences = new IdentityHashMap<>();
+ private final Map<Item, Integer> itemReferences = new IdentityHashMap<>();
private int nextItemReference = 0;
final private ItemDiscloser rootDiscloser;
+ @SuppressWarnings("rawtypes")
+ private String valueString(Object value) {
+ if (value == null)
+ return null;
+ else if (value instanceof String)
+ return '"' + quote((String)value) + '"';
+ else if (value instanceof Number || value instanceof Boolean || value instanceof Enum)
+ return value.toString();
+ else if (value instanceof Item)
+ return itemReference((Item)value);
+ else if (value.getClass().isArray())
+ return listString(arrayToList(value).iterator());
+ else if ( value instanceof List )
+ return listString(((List)value).iterator());
+ else if ( value instanceof Set )
+ return listString( ((Set)value).iterator());
+ else if ( value instanceof Map )
+ return mapString((Map)value);
+ else
+ return '"' + quote(value.toString()) + '"';
+ }
+
+ //handles both primitive and object arrays.
+ @SuppressWarnings({ "rawtypes", "unchecked" })
+ private List arrayToList(Object array) {
+ int length = Array.getLength(array);
+ List list = new ArrayList();
+ for (int i = 0; i<length; ++i)
+ list.add(Array.get(array, i));
+ return list;
+ }
+
+ private String mapString(Map<?, ?> map) {
+ StringBuilder result = new StringBuilder();
+ final String mapBegin = "map(";
+ result.append(mapBegin);
+
+ boolean firstTime = true;
+ for (Map.Entry<?,?> entry: map.entrySet()) {
+ if (!firstTime)
+ result.append(' ');
+ firstTime = false;
+
+ result.append(valueString(entry.getKey())).append("=>").append(valueString(entry.getValue()));
+ }
+
+ result.append(')');
+ return result.toString();
+ }
+
+ private String listString(Iterator<?> iterator) {
+ StringBuilder result = new StringBuilder();
+ result.append('(');
+
+ boolean firstTime = true;
+ while (iterator.hasNext()) {
+ if (!firstTime)
+ result.append(' ');
+ firstTime = false;
+
+ result.append(valueString(iterator.next()));
+ }
+
+ result.append(')');
+ return result.toString();
+ }
+
+ private String itemReference(Item item) {
+ Integer reference = itemReferences.get(item);
+ return reference != null ? reference.toString() : "Unknown item: '" + System.identityHashCode(item) + "'";
+ }
+
+ private static String quote(String s) {
+ return s.replaceAll("\"", "\\\\\"" );
+ }
+
+ private ItemDiscloser expose(Item item) {
+ ItemDiscloser itemDiscloser = new ItemDiscloser(item);
+ item.disclose(itemDiscloser);
+ return itemDiscloser;
+ }
+
+ public TextualQueryRepresentation(Item root) {
+ rootDiscloser = expose(root);
+ }
+
+ @Override
+ public String toString() {
+ return rootDiscloser.toString();
+ }
+
/** Creates the textual representation for a single Item. */
private class ItemDiscloser implements Discloser {
@@ -124,96 +215,4 @@ public class TextualQueryRepresentation {
}
-
- @SuppressWarnings("rawtypes")
- private String valueString(Object value) {
- if (value == null)
- return null;
- else if (value instanceof String)
- return '"' + quote((String)value) + '"';
- else if (value instanceof Number || value instanceof Boolean || value instanceof Enum)
- return value.toString();
- else if (value instanceof Item)
- return itemReference((Item)value);
- else if (value.getClass().isArray())
- return listString(arrayToList(value).iterator());
- else if ( value instanceof List )
- return listString(((List)value).iterator());
- else if ( value instanceof Set )
- return listString( ((Set)value).iterator());
- else if ( value instanceof Map )
- return mapString((Map)value);
- else
- return '"' + quote(value.toString()) + '"';
- }
-
- //handles both primitive and object arrays.
- @SuppressWarnings({ "rawtypes", "unchecked" })
- private List arrayToList(Object array) {
- int length = Array.getLength(array);
- List list = new ArrayList();
- for (int i = 0; i<length; ++i)
- list.add(Array.get(array, i));
- return list;
- }
-
- private String mapString(Map<?, ?> map) {
- StringBuilder result = new StringBuilder();
- final String mapBegin = "map(";
- result.append(mapBegin);
-
- boolean firstTime = true;
- for (Map.Entry<?,?> entry: map.entrySet()) {
- if (!firstTime)
- result.append(' ');
- firstTime = false;
-
- result.append(valueString(entry.getKey())).append("=>").append(valueString(entry.getValue()));
- }
-
- result.append(')');
- return result.toString();
- }
-
- private String listString(Iterator<?> iterator) {
- StringBuilder result = new StringBuilder();
- result.append('(');
-
- boolean firstTime = true;
- while (iterator.hasNext()) {
- if (!firstTime)
- result.append(' ');
- firstTime = false;
-
- result.append(valueString(iterator.next()));
- }
-
- result.append(')');
- return result.toString();
- }
-
- private String itemReference(Item item) {
- Integer reference = itemReferences.get(item);
- return reference != null ? reference.toString() : "Unknown item: '" + System.identityHashCode(item) + "'";
- }
-
- private static String quote(String s) {
- return s.replaceAll("\"", "\\\\\"" );
- }
-
- private ItemDiscloser expose(Item item) {
- ItemDiscloser itemDiscloser = new ItemDiscloser(item);
- item.disclose(itemDiscloser);
- return itemDiscloser;
- }
-
- public TextualQueryRepresentation(Item root) {
- rootDiscloser = expose(root);
- }
-
- @Override
- public String toString() {
- return rootDiscloser.toString();
- }
-
}