From 36c4b2c91ecd27ac5089c8ce14a3265d3ece4e01 Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Wed, 14 Feb 2024 12:25:21 +0100 Subject: Use Schemainfo instead of Indexfacts. --- .../main/java/com/yahoo/prelude/IndexFacts.java | 27 -------------- .../search/federation/FederationSearcher.java | 42 +++++++++++++++------- .../federation/sourceref/SourceRefResolver.java | 18 +++++----- .../querytransform/DefaultPositionSearcher.java | 4 --- 4 files changed, 38 insertions(+), 53 deletions(-) (limited to 'container-search/src/main/java') diff --git a/container-search/src/main/java/com/yahoo/prelude/IndexFacts.java b/container-search/src/main/java/com/yahoo/prelude/IndexFacts.java index c0dce3734b2..e4e50f8f2ff 100644 --- a/container-search/src/main/java/com/yahoo/prelude/IndexFacts.java +++ b/container-search/src/main/java/com/yahoo/prelude/IndexFacts.java @@ -3,9 +3,7 @@ package com.yahoo.prelude; import com.yahoo.search.Query; -import java.util.ArrayList; import java.util.Collection; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; @@ -29,8 +27,6 @@ import static com.yahoo.text.Lowercase.toLowerCase; // TODO: Complete migration to SchemaInfo public class IndexFacts { - private final Map> clusterByDocument; - private record DocumentTypeListOffset(int offset, SearchDefinition searchDefinition) { } /** A Map of all known search definitions indexed by name */ @@ -56,7 +52,6 @@ public class IndexFacts { public IndexFacts() { searchDefinitions = Map.of(); clusters = Map.of(); - clusterByDocument = Map.of(); } public IndexFacts(IndexModel indexModel) { @@ -65,28 +60,6 @@ public class IndexFacts { this.unionSearchDefinition = indexModel.getUnionSearchDefinition(); } this.clusters = indexModel.getMasterClusters(); - clusterByDocument = invert(clusters); - } - - private static Map> invert(Map> clusters) { - Map> result = new HashMap<>(); - for (Map.Entry> entry : clusters.entrySet()) { - for (String value : entry.getValue()) { - addEntry(result, value, entry.getKey()); - } - } - return result; - } - - private static void addEntry(Map> result, String key, String value) { - List values = result.computeIfAbsent(key, k -> new ArrayList<>()); - values.add(value); - } - - // Assumes that document names are equal to the search definition that contain them. - public List clustersHavingSearchDefinition(String searchDefinitionName) { - List clusters = clusterByDocument.get(searchDefinitionName); - return clusters != null ? clusters : List.of(); } private boolean notInitialized() { diff --git a/container-search/src/main/java/com/yahoo/search/federation/FederationSearcher.java b/container-search/src/main/java/com/yahoo/search/federation/FederationSearcher.java index 1f8f8757ebc..f40caac1562 100644 --- a/container-search/src/main/java/com/yahoo/search/federation/FederationSearcher.java +++ b/container-search/src/main/java/com/yahoo/search/federation/FederationSearcher.java @@ -11,7 +11,6 @@ import com.yahoo.component.chain.dependencies.Provides; import com.yahoo.component.provider.ComponentRegistry; import com.yahoo.errorhandling.Results; import com.yahoo.errorhandling.Results.Builder; -import com.yahoo.prelude.IndexFacts; import com.yahoo.processing.IllegalInputException; import com.yahoo.processing.request.CompoundName; import com.yahoo.search.Query; @@ -31,6 +30,8 @@ import com.yahoo.search.result.ErrorMessage; import com.yahoo.search.result.Hit; import com.yahoo.search.result.HitGroup; import com.yahoo.search.result.HitOrderer; +import com.yahoo.search.schema.Cluster; +import com.yahoo.search.schema.SchemaInfo; import com.yahoo.search.searchchain.AsyncExecution; import com.yahoo.search.searchchain.Execution; import com.yahoo.search.searchchain.ForkingSearcher; @@ -42,6 +43,7 @@ import java.time.Clock; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import java.util.IdentityHashMap; import java.util.Iterator; import java.util.LinkedHashSet; @@ -84,20 +86,26 @@ public class FederationSearcher extends ForkingSearcher { private final Clock clock = Clock.systemUTC(); @Inject - public FederationSearcher(FederationConfig config, ComponentRegistry targetSelectors) { - this(createResolver(config), VirtualSourceResolver.of(config), resolveSelector(config.targetSelector(), targetSelectors)); + public FederationSearcher(FederationConfig config, SchemaInfo schemaInfo, + ComponentRegistry targetSelectors) { + this(createResolver(config), + VirtualSourceResolver.of(config), + resolveSelector(config.targetSelector(), targetSelectors), + createSchema2Clusters(schemaInfo)); } // for testing - public FederationSearcher(ComponentId id, SearchChainResolver searchChainResolver) { - this(searchChainResolver, VirtualSourceResolver.of(), null); + public FederationSearcher(ComponentId id, SearchChainResolver searchChainResolver, + Map> schema2Clusters) { + this(searchChainResolver, VirtualSourceResolver.of(), null, schema2Clusters); } private FederationSearcher(SearchChainResolver searchChainResolver, VirtualSourceResolver virtualSourceResolver, - TargetSelector targetSelector) { + TargetSelector targetSelector, + Map> schema2Clusters) { this.searchChainResolver = searchChainResolver; - sourceRefResolver = new SourceRefResolver(searchChainResolver); + sourceRefResolver = new SourceRefResolver(searchChainResolver, schema2Clusters); this.targetSelector = targetSelector; this.virtualSourceResolver = virtualSourceResolver; } @@ -109,6 +117,16 @@ public class FederationSearcher extends ForkingSearcher { "Missing target selector with id '" + selectorId + "'"); } + private static Map> createSchema2Clusters(SchemaInfo schemaInfo) { + Map> schema2Clusters = new HashMap<>(); + for (Cluster cluster : schemaInfo.clusters().values()) { + for (String schema : cluster.schemas()) { + schema2Clusters.computeIfAbsent(schema, key -> new ArrayList<>()).add(cluster.name()); + } + } + return schema2Clusters; + } + private static SearchChainResolver createResolver(FederationConfig config) { SearchChainResolver.Builder builder = new SearchChainResolver.Builder(); @@ -164,7 +182,7 @@ public class FederationSearcher extends ForkingSearcher { Result mergedResults = execution.search(query); Results targets = - getTargets(query.getModel().getSources(), query.properties(), execution.context().getIndexFacts()); + getTargets(query.getModel().getSources(), query.properties()); warnIfUnresolvedSearchChains(targets.errors(), mergedResults.hits()); Collection prunedTargets = @@ -425,20 +443,20 @@ public class FederationSearcher extends ForkingSearcher { return orderer; } - private Results getTargets(Set sources, Properties properties, IndexFacts indexFacts) { + private Results getTargets(Set sources, Properties properties) { return sources.isEmpty() ? defaultSearchChains(properties): - resolveSources(sources, properties, indexFacts); + resolveSources(sources, properties); } - private Results resolveSources(Set sourcesInQuery, Properties properties, IndexFacts indexFacts) { + private Results resolveSources(Set sourcesInQuery, Properties properties) { Results.Builder result = new Builder<>(); Set sources = virtualSourceResolver.resolve(sourcesInQuery); for (String source : sources) { try { - result.addAllData(sourceRefResolver.resolve(asSourceSpec(source), properties, indexFacts)); + result.addAllData(sourceRefResolver.resolve(asSourceSpec(source), properties)); } catch (UnresolvedSearchChainException e) { result.addError(e); } diff --git a/container-search/src/main/java/com/yahoo/search/federation/sourceref/SourceRefResolver.java b/container-search/src/main/java/com/yahoo/search/federation/sourceref/SourceRefResolver.java index f096ed0de86..2e7849dd85a 100644 --- a/container-search/src/main/java/com/yahoo/search/federation/sourceref/SourceRefResolver.java +++ b/container-search/src/main/java/com/yahoo/search/federation/sourceref/SourceRefResolver.java @@ -2,11 +2,11 @@ package com.yahoo.search.federation.sourceref; import com.yahoo.component.ComponentSpecification; -import com.yahoo.prelude.IndexFacts; import com.yahoo.processing.request.Properties; import java.util.LinkedHashSet; import java.util.List; +import java.util.Map; import java.util.Set; /** @@ -17,30 +17,30 @@ import java.util.Set; public class SourceRefResolver { private final SearchChainResolver searchChainResolver; + private final Map> schema2Clusters; - public SourceRefResolver(SearchChainResolver searchChainResolver) { + public SourceRefResolver(SearchChainResolver searchChainResolver, Map> schema2Clusters) { this.searchChainResolver = searchChainResolver; + this.schema2Clusters = schema2Clusters; } public Set resolve(ComponentSpecification sourceRef, - Properties sourceToProviderMap, - IndexFacts indexFacts) throws UnresolvedSearchChainException { + Properties sourceToProviderMap) throws UnresolvedSearchChainException { try { return Set.of(searchChainResolver.resolve(sourceRef, sourceToProviderMap)); } catch (UnresolvedSourceRefException e) { - return resolveClustersWithDocument(sourceRef, sourceToProviderMap, indexFacts); + return resolveClustersWithDocument(sourceRef, sourceToProviderMap); } } private Set resolveClustersWithDocument(ComponentSpecification sourceRef, - Properties sourceToProviderMap, - IndexFacts indexFacts) + Properties sourceToProviderMap) throws UnresolvedSearchChainException { if (hasOnlyName(sourceRef)) { Set clusterSearchChains = new LinkedHashSet<>(); - List clusters = indexFacts.clustersHavingSearchDefinition(sourceRef.getName()); + List clusters = schema2Clusters.getOrDefault(sourceRef.getName(), List.of()); for (String cluster : clusters) { clusterSearchChains.add(resolveClusterSearchChain(cluster, sourceRef, sourceToProviderMap)); } @@ -48,9 +48,7 @@ public class SourceRefResolver { if ( ! clusterSearchChains.isEmpty()) return clusterSearchChains; } - throw UnresolvedSourceRefException.createForMissingSourceRef(sourceRef); - } private SearchChainInvocationSpec resolveClusterSearchChain(String cluster, diff --git a/container-search/src/main/java/com/yahoo/search/querytransform/DefaultPositionSearcher.java b/container-search/src/main/java/com/yahoo/search/querytransform/DefaultPositionSearcher.java index 86684603a45..4cb19bff740 100644 --- a/container-search/src/main/java/com/yahoo/search/querytransform/DefaultPositionSearcher.java +++ b/container-search/src/main/java/com/yahoo/search/querytransform/DefaultPositionSearcher.java @@ -33,10 +33,6 @@ public class DefaultPositionSearcher extends Searcher { this.useV8GeoPositions = cfg.usev8geopositions(); } - DefaultPositionSearcher() { - this.useV8GeoPositions = false; - } - @Override public com.yahoo.search.Result search(Query query, Execution execution) { Location location = query.getRanking().getLocation(); -- cgit v1.2.3