diff options
6 files changed, 34 insertions, 5 deletions
diff --git a/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java b/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java index 2410de55f86..9aad6361b9a 100644 --- a/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java +++ b/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java @@ -60,6 +60,7 @@ public interface ModelContext { double defaultTermwiseLimit(); boolean useBucketSpaceMetric(); default boolean useNewAthenzFilter() { return false; } + default boolean usePhraseSegmenting() { return false; } } } diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/derived/DerivedConfiguration.java b/config-model/src/main/java/com/yahoo/searchdefinition/derived/DerivedConfiguration.java index fc8710fa1a1..b16f8c0e5bb 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/derived/DerivedConfiguration.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/derived/DerivedConfiguration.java @@ -87,7 +87,7 @@ public class DerivedConfiguration { juniperrc = new Juniperrc(search); rankProfileList = new RankProfileList(search, search.rankingConstants(), attributeFields, rankProfileRegistry, queryProfiles, importedModels, deployProperties); indexingScript = new IndexingScript(search); - indexInfo = new IndexInfo(search); + indexInfo = new IndexInfo(search, deployProperties); indexSchema = new IndexSchema(search); importedFields = new ImportedFields(search); } diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/derived/IndexInfo.java b/config-model/src/main/java/com/yahoo/searchdefinition/derived/IndexInfo.java index 032f7f58e2a..f30a150aeee 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/derived/IndexInfo.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/derived/IndexInfo.java @@ -1,6 +1,7 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.searchdefinition.derived; +import com.yahoo.config.model.api.ModelContext; import com.yahoo.document.*; import com.yahoo.searchdefinition.Index; import com.yahoo.searchdefinition.Search; @@ -36,13 +37,16 @@ public class IndexInfo extends Derived implements IndexInfoConfig.Producer { private static final String CMD_FAST_SEARCH = "fast-search"; private static final String CMD_PREDICATE_BOUNDS = "predicate-bounds"; private static final String CMD_NUMERICAL = "numerical"; + private static final String CMD_PHRASE_SEGMENTING = "phrase-segmenting"; private Set<IndexCommand> commands = new java.util.LinkedHashSet<>(); private Map<String, String> aliases = new java.util.LinkedHashMap<>(); private Map<String, FieldSet> fieldSets; private Search search; + private final boolean phraseSegmenting; - public IndexInfo(Search search) { + public IndexInfo(Search search, ModelContext.Properties deployProperties) { this.fieldSets = search.fieldSets().userFieldSets(); + this.phraseSegmenting = deployProperties.usePhraseSegmenting(); addIndexCommand("sddocname", CMD_INDEX); addIndexCommand("sddocname", CMD_WORD); derive(search); @@ -153,6 +157,10 @@ public class IndexInfo extends Derived implements IndexInfoConfig.Producer { addIndexCommand(field, CMD_NUMERICAL); } + if (phraseSegmenting) { + addIndexCommand(field, CMD_PHRASE_SEGMENTING); + } + // Explicit commands for (String command : field.getQueryCommands()) { addIndexCommand(field, command); @@ -394,7 +402,12 @@ public class IndexInfo extends Derived implements IndexInfoConfig.Producer { } } - + + if (phraseSegmenting) { + iiB.command(new IndexInfoConfig.Indexinfo.Command.Builder() + .indexname(fieldSet.getName()) + .command(CMD_PHRASE_SEGMENTING)); + } } private boolean hasMultiValueField(FieldSet fieldSet) { diff --git a/config-model/src/main/java/com/yahoo/vespa/model/search/IndexedSearchCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/search/IndexedSearchCluster.java index 1b4c03a2182..445c93ba66e 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/search/IndexedSearchCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/search/IndexedSearchCluster.java @@ -202,7 +202,8 @@ public class IndexedSearchCluster extends SearchCluster com.yahoo.searchdefinition.Search search = spec.getSearchDefinition().getSearch(); if ( ! (search instanceof DocumentOnlySearch)) { DocumentDatabase db = new DocumentDatabase(this, search.getName(), - new DerivedConfiguration(search, deployState.getDeployLogger(), + new DerivedConfiguration(search, + deployState.getDeployLogger(), deployState.getProperties(), deployState.rankProfileRegistry(), deployState.getQueryProfiles().getRegistry(), diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java b/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java index 829a59a9598..a15b570a55d 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java @@ -135,6 +135,7 @@ public class ModelContextImpl implements ModelContext { private final double defaultTermwiseLimit; private final boolean useBucketSpaceMetric; private final boolean useNewAthenzFilter; + private final boolean usePhraseSegmenting; public Properties(ApplicationId applicationId, boolean multitenantFromConfig, @@ -169,6 +170,8 @@ public class ModelContextImpl implements ModelContext { .with(FetchVector.Dimension.APPLICATION_ID, applicationId.serializedForm()).value(); this.useNewAthenzFilter = Flags.USE_NEW_ATHENZ_FILTER.bindTo(flagSource) .with(FetchVector.Dimension.APPLICATION_ID, applicationId.serializedForm()).value(); + this.usePhraseSegmenting = Flags.PHRASE_SEGMENTING.bindTo(flagSource) + .with(FetchVector.Dimension.APPLICATION_ID, applicationId.serializedForm()).value(); } @Override @@ -223,7 +226,12 @@ public class ModelContextImpl implements ModelContext { @Override public boolean useBucketSpaceMetric() { return useBucketSpaceMetric; } - @Override public boolean useNewAthenzFilter() { return useNewAthenzFilter; } + @Override + public boolean useNewAthenzFilter() { return useNewAthenzFilter; } + + @Override + public boolean usePhraseSegmenting() { return usePhraseSegmenting; } + } } diff --git a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java index 815fcda6ee7..6b71ad24f71 100644 --- a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java +++ b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java @@ -243,6 +243,12 @@ public class Flags { "Whether to provision and use endpoint certs for apps in shared routing zones", "Takes effect on next deployment of the application", APPLICATION_ID); + public static final UnboundBooleanFlag PHRASE_SEGMENTING = defineFeatureFlag( + "phrase-segmenting", true, + "Should 'implicit phrases' in queries we parsed to a phrase or and?", + "Takes effect immediately", + ZONE_ID, APPLICATION_ID); + /** WARNING: public for testing: All flags should be defined in {@link Flags}. */ public static UnboundBooleanFlag defineFeatureFlag(String flagId, boolean defaultValue, String description, String modificationEffect, FetchVector.Dimension... dimensions) { |