summaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2018-05-29 12:47:21 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2018-05-29 12:47:21 +0200
commit65fc4391a8ceded034e17a83d37b2a947f326d9e (patch)
treecaa845810398753b13e53a896448bb546ca2727c /container-search
parentbb60362c86a9fafeb129db4f2276aadca17ee1f9 (diff)
Due to stack representation we need to use fully qualified names over the wire to avoid special handling in the backend.
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/query/SameElementItem.java19
-rw-r--r--container-search/src/main/java/com/yahoo/search/yql/VespaSerializer.java7
2 files changed, 17 insertions, 9 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 bc6463a24eb..3b3bc468fe3 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
@@ -16,27 +16,28 @@ import java.util.Iterator;
@Beta
public class SameElementItem extends CompositeItem {
- private final String commonPath;
+ private final String fieldName;
public SameElementItem(String commonPath) {
- this.commonPath = commonPath;
+ Validator.ensureNonEmpty("Field name", commonPath);
+ this.fieldName = commonPath;
}
@Override
protected void encodeThis(ByteBuffer buffer) {
super.encodeThis(buffer);
- putString(commonPath, buffer);
+ putString(fieldName, buffer);
}
@Override
protected void appendHeadingString(StringBuilder buffer) { }
@Override
protected void appendBodyString(StringBuilder buffer) {
- buffer.append(commonPath).append(':');
+ buffer.append(fieldName).append(':');
buffer.append('{');
for (Iterator<Item> i = getItemIterator(); i.hasNext();) {
TermItem term = (TermItem) i.next();
- buffer.append(term.getIndexName()).append(':').append(term.getIndexedString());
+ buffer.append(extractSubFieldName(term)).append(':').append(term.getIndexedString());
if (i.hasNext()) {
buffer.append(' ');
}
@@ -50,6 +51,9 @@ public class SameElementItem extends CompositeItem {
TermItem asTerm = (TermItem) item;
Validator.ensureNonEmpty("Struct fieldname", asTerm.getIndexName());
Validator.ensureNonEmpty("Query term", asTerm.getIndexedString());
+ Validator.ensure("Struct fieldname does not start with '" + getFieldName() + "'",
+ !asTerm.getIndexName().startsWith(fieldName));
+ item.setIndexName(fieldName + '.' + asTerm.getIndexName());
}
@Override
public ItemType getItemType() {
@@ -60,5 +64,8 @@ public class SameElementItem extends CompositeItem {
public String getName() {
return getItemType().toString();
}
- public String getCommonPath() { return commonPath; }
+ public String getFieldName() { return fieldName; }
+ public String extractSubFieldName(TermItem full) {
+ return full.getIndexName().substring(getFieldName().length()+1);
+ }
}
diff --git a/container-search/src/main/java/com/yahoo/search/yql/VespaSerializer.java b/container-search/src/main/java/com/yahoo/search/yql/VespaSerializer.java
index 1d89a5d7a68..12aec81a5f8 100644
--- a/container-search/src/main/java/com/yahoo/search/yql/VespaSerializer.java
+++ b/container-search/src/main/java/com/yahoo/search/yql/VespaSerializer.java
@@ -597,7 +597,7 @@ public class VespaSerializer {
SameElementItem sameElement = (SameElementItem) item;
if (includeField) {
- destination.append(normalizeIndexName(sameElement.getCommonPath())).append(" contains ");
+ destination.append(normalizeIndexName(sameElement.getFieldName())).append(" contains ");
}
destination.append(SAME_ELEMENT).append('(');
@@ -607,8 +607,9 @@ public class VespaSerializer {
}
Item current = sameElement.getItem(i);
if (current instanceof WordItem) {
- new WordSerializer().serialize(destination, current);
-
+ WordItem modified = (WordItem)current.clone();
+ modified.setIndexName(sameElement.extractSubFieldName(modified));
+ new WordSerializer().serialize(destination, modified);
} else {
throw new IllegalArgumentException(
"Serializing of " + current.getClass().getSimpleName()