aboutsummaryrefslogtreecommitdiffstats
path: root/config-model/src/main/java/com
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@oath.com>2018-10-10 12:01:05 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2018-10-12 14:25:29 +0200
commitf2e0e1d72d30121cf1458246dacce3f85f84ddc0 (patch)
treec58e61270f90c3ca348ef5cc039c4507c12872a2 /config-model/src/main/java/com
parente95e161f2199efbc949a831af4e6c246d68a069e (diff)
Add from-disk flag on document-summary
And warn if not set and the summary accesses disk.
Diffstat (limited to 'config-model/src/main/java/com')
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/Search.java8
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/SearchBuilder.java6
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/derived/SummaryClass.java4
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/derived/VsmSummary.java5
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/document/ImmutableImportedSDField.java6
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/document/ImmutableSDField.java8
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/document/SDField.java24
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/SummaryInFieldLongOperation.java3
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/SummaryInFieldOperation.java4
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/Bolding.java2
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/CreatePositionZCurve.java4
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/ImplicitSummaries.java2
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingOutputs.java2
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java3
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryDiskAccessValidator.java64
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryDynamicStructsArrays.java2
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryFieldsMustHaveValidSource.java4
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/documentmodel/DocumentSummary.java7
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/documentmodel/SummaryField.java19
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/search/IndexingScriptChangeMessageBuilder.java2
20 files changed, 137 insertions, 42 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/Search.java b/config-model/src/main/java/com/yahoo/searchdefinition/Search.java
index a988da9664e..d7c4c27b2b0 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/Search.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/Search.java
@@ -3,6 +3,7 @@ package com.yahoo.searchdefinition;
import com.yahoo.config.application.api.ApplicationPackage;
import com.yahoo.document.Field;
+import com.yahoo.searchdefinition.derived.SummaryClass;
import com.yahoo.searchdefinition.document.Attribute;
import com.yahoo.searchdefinition.document.ImmutableImportedSDField;
import com.yahoo.searchdefinition.document.ImmutableSDField;
@@ -46,12 +47,10 @@ public class Search implements Serializable, ImmutableSearch {
private static final Logger log = Logger.getLogger(Search.class.getName());
private static final String SD_DOC_FIELD_NAME = "sddocname";
private static final List<String> RESERVED_NAMES = Arrays.asList(
- "index", "index_url", "summary", "attribute", "select_input", "host", "documentid",
+ "index", "index_url", "summary", "attribute", "select_input", "host", SummaryClass.DOCUMENT_ID_FIELD,
"position", "split_foreach", "tokenize", "if", "else", "switch", "case", SD_DOC_FIELD_NAME, "relevancy");
- /**
- * @return True if the given field name is a reserved name.
- */
+ /** Returns true if the given field name is a reserved name */
public static boolean isReservedName(String name) {
return RESERVED_NAMES.contains(name);
}
@@ -99,6 +98,7 @@ public class Search implements Serializable, ImmutableSearch {
/**
* Creates a proper search definition
+ *
* @param name of the the searchdefinition
* @param applicationPackage the application containing this
*/
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/SearchBuilder.java b/config-model/src/main/java/com/yahoo/searchdefinition/SearchBuilder.java
index 151ad02a3fa..d8ec0b053ad 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/SearchBuilder.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/SearchBuilder.java
@@ -332,7 +332,11 @@ public class SearchBuilder {
* @throws ParseException if there was a problem parsing the file content.
*/
public static SearchBuilder createFromFile(String fileName) throws IOException, ParseException {
- return createFromFile(fileName, new BaseDeployLogger(), new RankProfileRegistry(), new QueryProfileRegistry());
+ return createFromFile(fileName, new BaseDeployLogger());
+ }
+
+ public static SearchBuilder createFromFile(String fileName, DeployLogger logger) throws IOException, ParseException {
+ return createFromFile(fileName, logger, new RankProfileRegistry(), new QueryProfileRegistry());
}
/**
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/derived/SummaryClass.java b/config-model/src/main/java/com/yahoo/searchdefinition/derived/SummaryClass.java
index dd5826e716f..56cfb2a595c 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/derived/SummaryClass.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/derived/SummaryClass.java
@@ -24,6 +24,8 @@ import java.util.logging.Level;
*/
public class SummaryClass extends Derived {
+ public static final String DOCUMENT_ID_FIELD = "documentid";
+
/** True if this summary class needs to access summary information on disk */
private boolean accessingDiskSummary=false;
@@ -53,7 +55,7 @@ public class SummaryClass extends Derived {
/** MUST be called after all other fields are added */
private void deriveImplicitFields(DocumentSummary summary) {
if (summary.getName().equals("default")) {
- addField("documentid", DataType.STRING);
+ addField(SummaryClass.DOCUMENT_ID_FIELD, DataType.STRING);
}
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/derived/VsmSummary.java b/config-model/src/main/java/com/yahoo/searchdefinition/derived/VsmSummary.java
index 471234928b4..17210452b3f 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/derived/VsmSummary.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/derived/VsmSummary.java
@@ -17,6 +17,7 @@ import java.util.*;
* @author bratseth
*/
public class VsmSummary extends Derived implements VsmsummaryConfig.Producer {
+
private Map<SummaryField, List<String>> summaryMap = new java.util.LinkedHashMap<>(1);
public VsmSummary(Search search) {
@@ -80,10 +81,10 @@ public class VsmSummary extends Derived implements VsmsummaryConfig.Producer {
return true;
}
- private List<String> toStringList(Iterator i) {
+ private List<String> toStringList(Iterator<SummaryField.Source> i) {
List<String> ret = new ArrayList<>();
while (i.hasNext()) {
- ret.add(i.next().toString());
+ ret.add(i.next().getName());
}
return ret;
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/document/ImmutableImportedSDField.java b/config-model/src/main/java/com/yahoo/searchdefinition/document/ImmutableImportedSDField.java
index ff11c2fdf22..dc2a1a2bbae 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/document/ImmutableImportedSDField.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/document/ImmutableImportedSDField.java
@@ -5,6 +5,7 @@ import com.yahoo.document.DataType;
import com.yahoo.document.Field;
import com.yahoo.searchdefinition.Index;
import com.yahoo.searchdefinition.Search;
+import com.yahoo.vespa.documentmodel.SummaryField;
import com.yahoo.vespa.indexinglanguage.expressions.Expression;
import com.yahoo.vespa.indexinglanguage.expressions.ScriptExpression;
@@ -150,6 +151,11 @@ public class ImmutableImportedSDField implements ImmutableSDField {
}
@Override
+ public Map<String, SummaryField> getSummaryFields() {
+ throw createUnsupportedException("summary fields");
+ }
+
+ @Override
public String getName() {
return importedField.fieldName(); // Name of the imported field, not the target field
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/document/ImmutableSDField.java b/config-model/src/main/java/com/yahoo/searchdefinition/document/ImmutableSDField.java
index 6fe8a4da92b..4ae7561a7bc 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/document/ImmutableSDField.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/document/ImmutableSDField.java
@@ -5,10 +5,12 @@ import com.yahoo.document.DataType;
import com.yahoo.document.Field;
import com.yahoo.searchdefinition.Index;
import com.yahoo.searchdefinition.Search;
+import com.yahoo.vespa.documentmodel.SummaryField;
import com.yahoo.vespa.indexinglanguage.expressions.Expression;
import com.yahoo.vespa.indexinglanguage.expressions.ScriptExpression;
import java.util.Collection;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -76,9 +78,9 @@ public interface ImmutableSDField {
String getName();
- /**
- * @return a {@link Field} representation (which is sadly not immutable).
- */
+ Map<String, SummaryField> getSummaryFields();
+
+ /** Returns a {@link Field} representation (which is sadly not immutable) */
Field asField();
boolean hasFullIndexingDocprocRights();
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/document/SDField.java b/config-model/src/main/java/com/yahoo/searchdefinition/document/SDField.java
index 6fc896b90c6..55260b6e68f 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/document/SDField.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/document/SDField.java
@@ -78,10 +78,10 @@ public class SDField extends Field implements TypedKey, FieldOperationContainer,
private List<String> queryCommands=new java.util.ArrayList<>(0);
/** Summary fields defined in this field */
- private Map<String,SummaryField> summaryFields = new java.util.LinkedHashMap<>(0);
+ private Map<String, SummaryField> summaryFields = new java.util.LinkedHashMap<>(0);
/** The explicitly index settings on this field */
- private Map<String, Index> indices=new java.util.LinkedHashMap<>();
+ private Map<String, Index> indices = new java.util.LinkedHashMap<>();
/** True if body or header is set explicitly for this field */
private boolean headerOrBodyDefined = false;
@@ -254,7 +254,7 @@ public class SDField extends Field implements TypedKey, FieldOperationContainer,
* to the main summary-field for the struct field.
*/
for (SDField structField : getStructFields()) {
- for (SummaryField sumF : structField.getSummaryFields()) {
+ for (SummaryField sumF : structField.getSummaryFields().values()) {
for (String dest : sumF.getDestinations()) {
summaryField.addDestination(dest);
}
@@ -672,15 +672,17 @@ public class SDField extends Field implements TypedKey, FieldOperationContainer,
this.stemming=stemming;
}
- /**
- * List of static summary fields
- * @return list of static summary fields
- */
- public Collection<SummaryField> getSummaryFields() { return summaryFields.values(); }
+ /** Returns an unmodifiable map of the summary fields defined in this */
+ @Override
+ public Map<String, SummaryField> getSummaryFields() {
+ return Collections.unmodifiableMap(summaryFields);
+ }
- /**
- * Add summary field
- */
+ public void removeSummaryFields() {
+ summaryFields.clear();
+ }
+
+ /** Adds a summary field */
public void addSummaryField(SummaryField summaryField) {
summaryFields.put(summaryField.getName(),summaryField);
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/SummaryInFieldLongOperation.java b/config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/SummaryInFieldLongOperation.java
index 4d6e077aaaa..f05873c5c6b 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/SummaryInFieldLongOperation.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/SummaryInFieldLongOperation.java
@@ -11,9 +11,10 @@ import java.util.List;
import java.util.Set;
/**
- * @author <a href="mailto:einarmr@yahoo-inc.com">Einar M R Rosenvinge</a>
+ * @author Einar M R Rosenvinge
*/
public class SummaryInFieldLongOperation extends SummaryInFieldOperation {
+
private DataType type;
private Boolean bold;
private Set<String> destinations = new java.util.LinkedHashSet<>();
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/SummaryInFieldOperation.java b/config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/SummaryInFieldOperation.java
index 6abbc2e9ac8..b36a1cb0cbc 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/SummaryInFieldOperation.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/fieldoperation/SummaryInFieldOperation.java
@@ -7,9 +7,10 @@ import com.yahoo.vespa.documentmodel.SummaryTransform;
import java.util.Set;
/**
- * @author <a href="mailto:einarmr@yahoo-inc.com">Einar M R Rosenvinge</a>
+ * @author Einar M R Rosenvinge
*/
public abstract class SummaryInFieldOperation implements FieldOperation {
+
protected String name;
protected SummaryTransform transform;
protected Set<SummaryField.Source> sources = new java.util.LinkedHashSet<>();
@@ -41,4 +42,5 @@ public abstract class SummaryInFieldOperation implements FieldOperation {
public void addSource(SummaryField.Source source) {
sources.add(source);
}
+
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/Bolding.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/Bolding.java
index b9be30e8485..b59d3527e87 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/Bolding.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/Bolding.java
@@ -25,7 +25,7 @@ public class Bolding extends Processor {
public void process(boolean validate, boolean documentsOnly) {
if ( ! validate) return;
for (SDField field : search.allConcreteFields()) {
- for (SummaryField summary : field.getSummaryFields()) {
+ for (SummaryField summary : field.getSummaryFields().values()) {
if (summary.getTransform().isBolded() &&
!((summary.getDataType() == DataType.STRING) || (summary.getDataType() == DataType.URI)))
{
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/CreatePositionZCurve.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/CreatePositionZCurve.java
index ad862ef767f..c56c4f6b056 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/CreatePositionZCurve.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/CreatePositionZCurve.java
@@ -133,11 +133,11 @@ public class CreatePositionZCurve extends Processor {
private Set<String> removeSummaryTo(SDField field) {
Set<String> summaryTo = new HashSet<>();
- Collection<SummaryField> summaryFields = field.getSummaryFields();
+ Collection<SummaryField> summaryFields = field.getSummaryFields().values();
for (SummaryField summary : summaryFields) {
summaryTo.addAll(summary.getDestinations());
}
- summaryFields.clear();
+ field.removeSummaryFields();
return summaryTo;
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImplicitSummaries.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImplicitSummaries.java
index 1f795458875..724fb060dc2 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImplicitSummaries.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImplicitSummaries.java
@@ -98,7 +98,7 @@ public class ImplicitSummaries extends Processor {
}
// Explicits
- for (SummaryField summaryField : field.getSummaryFields()) {
+ for (SummaryField summaryField : field.getSummaryFields().values()) {
// Make sure we fetch from attribute here too
Attribute attribute = field.getAttributes().get(fieldName);
if (attribute != null && summaryField.getTransform() == SummaryTransform.NONE) {
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingOutputs.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingOutputs.java
index 11d69bf6c75..4feb5b6103b 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingOutputs.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingOutputs.java
@@ -82,7 +82,7 @@ public class IndexingOutputs extends Processor {
}
private static void fillSummaryToFromField(SDField field, Set<String> dynamicSummary, Set<String> staticSummary) {
- for (SummaryField summaryField : field.getSummaryFields()) {
+ for (SummaryField summaryField : field.getSummaryFields().values()) {
String summaryName = summaryField.getName();
if (summaryField.getTransform().isDynamic()) {
dynamicSummary.add(summaryName);
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java
index 1af2a979cb4..f744eeb82e1 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java
@@ -62,6 +62,7 @@ public class Processing {
FilterFieldNames::new,
MatchConsistency::new,
ValidateFieldTypes::new,
+ SummaryDiskAccessValidator::new,
DisallowComplexMapAndWsetKeyTypes::new,
SortingSettings::new,
FieldSetValidity::new,
@@ -80,7 +81,7 @@ public class Processing {
IndexingValues::new);
}
- /** Processors of rank profiles only (those who tolerate and so something useful when the search field is null) */
+ /** Processors of rank profiles only (those who tolerate and do something useful when the search field is null) */
private Collection<ProcessorFactory> rankProfileProcessors() {
return Arrays.asList(
RankProfileTypeSettingsProcessor::new,
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryDiskAccessValidator.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryDiskAccessValidator.java
new file mode 100644
index 00000000000..8c0c6a74037
--- /dev/null
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryDiskAccessValidator.java
@@ -0,0 +1,64 @@
+package com.yahoo.searchdefinition.processing;
+
+import com.yahoo.config.application.api.DeployLogger;
+import com.yahoo.searchdefinition.RankProfileRegistry;
+import com.yahoo.searchdefinition.Search;
+import com.yahoo.searchdefinition.derived.SummaryClass;
+import com.yahoo.searchdefinition.document.ImmutableSDField;
+import com.yahoo.vespa.documentmodel.DocumentSummary;
+import com.yahoo.vespa.documentmodel.SummaryField;
+import com.yahoo.vespa.model.container.search.QueryProfiles;
+
+import java.util.Optional;
+import java.util.logging.Level;
+
+/**
+ * Emits a warning for summaries which accesses disk.
+ *
+ * @author bratseth
+ */
+public class SummaryDiskAccessValidator extends Processor {
+
+ public SummaryDiskAccessValidator(Search search,
+ DeployLogger deployLogger,
+ RankProfileRegistry rankProfileRegistry,
+ QueryProfiles queryProfiles) {
+ super(search, deployLogger, rankProfileRegistry, queryProfiles);
+ }
+
+
+ @Override
+ public void process(boolean validate, boolean documentsOnly) {
+ if ( ! validate) return;
+ if (documentsOnly) return;
+
+ for (DocumentSummary summary : search.getSummaries().values()) {
+ for (SummaryField summaryField : summary.getSummaryFields()) {
+ for (SummaryField.Source source : summaryField.getSources()) {
+ ImmutableSDField field = search.getField(source.getName());
+ if (field == null)
+ field = findFieldProducingSummaryField(source.getName(), search).orElse(null);
+ if (field == null && ! source.getName().equals(SummaryClass.DOCUMENT_ID_FIELD))
+ throw new IllegalArgumentException(summaryField + " in " + summary + " references " +
+ source + ", but this field does not exist");
+ if ( ! isInMemory(field) && ! summary.isFromDisk()) {
+ deployLogger.log(Level.WARNING, summaryField + " in " + summary + " references " +
+ source + ", which is not an attribute: Using this " +
+ "summary will cause disk accesses. " +
+ "Set 'from-disk' on this summary class to silence this warning.");
+ }
+ }
+ }
+ }
+ }
+
+ private boolean isInMemory(ImmutableSDField field) {
+ if (field == null) return false; // For DOCUMENT_ID_FIELD, which may be implicit, but is then not in memory
+ return field.doesAttributing();
+ }
+
+ private Optional<ImmutableSDField> findFieldProducingSummaryField(String name, Search search) {
+ return search.allFields().filter(field -> field.getSummaryFields().get(name) != null).findAny();
+ }
+
+}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryDynamicStructsArrays.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryDynamicStructsArrays.java
index b8d170c07f6..255e95e9667 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryDynamicStructsArrays.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryDynamicStructsArrays.java
@@ -32,7 +32,7 @@ public class SummaryDynamicStructsArrays extends Processor {
for (SDField field : search.allConcreteFields()) {
DataType type = field.getDataType();
if (type instanceof ArrayDataType || type instanceof WeightedSetDataType || type instanceof StructDataType) {
- for (SummaryField sField : field.getSummaryFields()) {
+ for (SummaryField sField : field.getSummaryFields().values()) {
if (sField.getTransform().equals(SummaryTransform.DYNAMICTEASER)) {
throw new IllegalArgumentException("For field '"+field.getName()+"': dynamic summary is illegal " +
"for fields of type struct, array or weighted set. Use an " +
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryFieldsMustHaveValidSource.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryFieldsMustHaveValidSource.java
index 9b51c7c473e..c87801685bb 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryFieldsMustHaveValidSource.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryFieldsMustHaveValidSource.java
@@ -4,6 +4,7 @@ package com.yahoo.searchdefinition.processing;
import com.yahoo.config.application.api.DeployLogger;
import com.yahoo.searchdefinition.RankProfileRegistry;
import com.yahoo.searchdefinition.Search;
+import com.yahoo.searchdefinition.derived.SummaryClass;
import com.yahoo.vespa.documentmodel.DocumentSummary;
import com.yahoo.vespa.documentmodel.SummaryField;
import com.yahoo.vespa.documentmodel.SummaryTransform;
@@ -13,7 +14,6 @@ import com.yahoo.vespa.model.container.search.QueryProfiles;
* Verifies that the source fields actually refers to a valid field.
*
* @author baldersheim
- *
*/
public class SummaryFieldsMustHaveValidSource extends Processor {
@@ -51,7 +51,7 @@ public class SummaryFieldsMustHaveValidSource extends Processor {
return isDocumentField(source) ||
(isNotInThisSummaryClass(summary, source) && isSummaryField(source)) ||
(isInThisSummaryClass(summary, source) && !source.equals(summaryField.getName())) ||
- ("documentid".equals(source));
+ (SummaryClass.DOCUMENT_ID_FIELD.equals(source));
}
private void verifySource(String source, SummaryField summaryField, DocumentSummary summary) {
diff --git a/config-model/src/main/java/com/yahoo/vespa/documentmodel/DocumentSummary.java b/config-model/src/main/java/com/yahoo/vespa/documentmodel/DocumentSummary.java
index 3860a1b278c..8dc5356026b 100644
--- a/config-model/src/main/java/com/yahoo/vespa/documentmodel/DocumentSummary.java
+++ b/config-model/src/main/java/com/yahoo/vespa/documentmodel/DocumentSummary.java
@@ -15,6 +15,8 @@ import java.util.List;
*/
public class DocumentSummary extends FieldView {
+ private boolean fromDisk = false;
+
/**
* Creates a DocumentSummary with the given name.
*
@@ -24,6 +26,11 @@ public class DocumentSummary extends FieldView {
super(name);
}
+ public void setFromDisk(boolean fromDisk) { this.fromDisk = fromDisk; }
+
+ /** Returns whether the user has noted explicitly that this summary accesses disk */
+ public boolean isFromDisk() { return fromDisk; }
+
/**
* The model is constrained to ensure that summary fields of the same name
* in different classes have the same summary transform, because this is
diff --git a/config-model/src/main/java/com/yahoo/vespa/documentmodel/SummaryField.java b/config-model/src/main/java/com/yahoo/vespa/documentmodel/SummaryField.java
index 049c1f1318b..0f162ee9d51 100644
--- a/config-model/src/main/java/com/yahoo/vespa/documentmodel/SummaryField.java
+++ b/config-model/src/main/java/com/yahoo/vespa/documentmodel/SummaryField.java
@@ -18,9 +18,10 @@ import static com.yahoo.text.Lowercase.toLowerCase;
public class SummaryField extends Field implements Cloneable, TypedKey {
/**
- * This class represents a source (field name).
+ * A source (field name).
*/
public static class Source implements Serializable {
+
private String name;
private boolean override = false;
public Source(String name) {
@@ -29,9 +30,13 @@ public class SummaryField extends Field implements Cloneable, TypedKey {
public String getName() { return name; }
public void setOverride(boolean override) { this.override = override; }
public boolean getOverride() { return override; }
+
+ @Override
public int hashCode() {
return name.hashCode() + Boolean.valueOf(override).hashCode();
}
+
+ @Override
public boolean equals(Object obj) {
if (!(obj instanceof Source)) {
return false;
@@ -40,9 +45,12 @@ public class SummaryField extends Field implements Cloneable, TypedKey {
return name.equals(other.name) &&
override == other.override;
}
+
+ @Override
public String toString() {
- return name;
+ return "source field '" + name + "'";
}
+
}
/** A name-value property (used for smart summary) */
@@ -267,12 +275,7 @@ public class SummaryField extends Field implements Cloneable, TypedKey {
}
public String toString() {
- return
- "summary field '" + getName() + ' ' + getDestinationString() +
- "' [type: '" + getDataType().getName() +
- "' transform: '" + transform +
- "', source: '" + toString(sources) +
- "', to '" + toString(destinations) + "']";
+ return "summary field '" + getName() + "'";
}
/** Returns a string which aids locating this field in the source search definition */
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/search/IndexingScriptChangeMessageBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/search/IndexingScriptChangeMessageBuilder.java
index ce430c27013..d680f6bd37c 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/search/IndexingScriptChangeMessageBuilder.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/change/search/IndexingScriptChangeMessageBuilder.java
@@ -71,7 +71,7 @@ public class IndexingScriptChangeMessageBuilder {
}
private void checkSummaryTransform(ChangeMessageBuilder builder) {
- for (SummaryField nextSummaryField : nextField.getSummaryFields()) {
+ for (SummaryField nextSummaryField : nextField.getSummaryFields().values()) {
String fieldName = nextSummaryField.getName();
SummaryField currentSummaryField = currentField.getSummaryField(fieldName);
if (currentSummaryField != null) {