public class FederationSearcher extends ForkingSearcher
Modifier and Type | Class and Description |
---|---|
private static class |
FederationSearcher.CompoundKey |
private static class |
FederationSearcher.CustomTarget<T>
A target handler where the target generation logic is delegated to the application provided target selector
|
private static class |
FederationSearcher.ProviderKey |
private static class |
FederationSearcher.SourceKey |
private static class |
FederationSearcher.StandardTarget
A handler representing a target created by the federation logic.
|
(package private) static class |
FederationSearcher.Target
A target for federation, containing a chain to which a federation query can be forwarded.
|
private static class |
FederationSearcher.UniqueExecutionsToResults
A map from a unique search chain and query instance to a result
|
private static class |
FederationSearcher.Window |
ForkingSearcher.CommentedSearchChain
Modifier and Type | Field and Description |
---|---|
private Clock |
clock |
static String |
FEDERATION |
private static Logger |
log |
static String |
LOG_COUNT_PREFIX
Logging field name constants
|
private com.yahoo.concurrent.CopyOnWriteHashMap<FederationSearcher.CompoundKey,com.yahoo.processing.request.CompoundName> |
map |
private StrictContractsConfig.PropagateSourceProperties.Enum |
propagateSourceProperties |
static com.yahoo.processing.request.CompoundName |
PROVIDERNAME |
private SearchChainResolver |
searchChainResolver |
static com.yahoo.processing.request.CompoundName |
SOURCENAME
The name of the query property containing the source name added to the query to each source by this
|
private SourceRefResolver |
sourceRefResolver |
private boolean |
strictSearchchain |
private TargetSelector<?> |
targetSelector |
Modifier | Constructor and Description |
---|---|
|
FederationSearcher(com.yahoo.component.ComponentId id,
SearchChainResolver searchChainResolver) |
|
FederationSearcher(FederationConfig config,
StrictContractsConfig strict,
com.yahoo.component.provider.ComponentRegistry<TargetSelector> targetSelectors) |
private |
FederationSearcher(SearchChainResolver searchChainResolver,
boolean strictSearchchain,
StrictContractsConfig.PropagateSourceProperties.Enum propagateSourceProperties,
TargetSelector targetSelector) |
ensureFilled, getLogger, process, toString
getAnnotatedDependencies, getDefaultAnnotatedDependencies, getDependencies, initDependencies
public static final String FEDERATION
private static final Logger log
public static final com.yahoo.processing.request.CompoundName SOURCENAME
public static final com.yahoo.processing.request.CompoundName PROVIDERNAME
public static final String LOG_COUNT_PREFIX
private final SearchChainResolver searchChainResolver
private final StrictContractsConfig.PropagateSourceProperties.Enum propagateSourceProperties
private final SourceRefResolver sourceRefResolver
private final com.yahoo.concurrent.CopyOnWriteHashMap<FederationSearcher.CompoundKey,com.yahoo.processing.request.CompoundName> map
private final boolean strictSearchchain
private final TargetSelector<?> targetSelector
private final Clock clock
@Inject public FederationSearcher(FederationConfig config, StrictContractsConfig strict, com.yahoo.component.provider.ComponentRegistry<TargetSelector> targetSelectors)
public FederationSearcher(com.yahoo.component.ComponentId id, SearchChainResolver searchChainResolver)
private FederationSearcher(SearchChainResolver searchChainResolver, boolean strictSearchchain, StrictContractsConfig.PropagateSourceProperties.Enum propagateSourceProperties, TargetSelector targetSelector)
private static TargetSelector resolveSelector(String selectorId, com.yahoo.component.provider.ComponentRegistry<TargetSelector> targetSelectors)
private static SearchChainResolver createResolver(FederationConfig config)
private static void addSearchChain(SearchChainResolver.Builder builder, FederationConfig.Target target, FederationConfig.Target.SearchChain searchChain)
private static void addSourceForProvider(SearchChainResolver.Builder builder, FederationConfig.Target target, FederationConfig.Target.SearchChain searchChain, boolean isDefaultProvider)
private static FederationOptions federationOptions(FederationConfig.Target.SearchChain searchChain)
public Result search(Query query, Execution execution)
Searcher
Searcher implementation subclasses will, depending on their type of logic, do one of the following:
Hits come in two kinds - concrete hits are actual content of the kind requested by the user, meta hits are hits which provides information about the collection of hits, on the query, the service and so on.
The query specifies a window into a larger result list that must be returned from the searcher through hits and offset; Searchers which returns list of hits in the top level in the result must return at least hits number of hits (or if impossible; all that are available), starting at the given offset. In addition, searchers are allowed to return any number of meta hits (although this number is expected to be low). For hits contained in nested hit groups, the concept of a window defined by hits and offset is not well defined and does not apply.
Error handling in searchers:
private void search(Query query, Execution execution, FederationSearcher.Target target, Result mergedResults)
private void search(Query query, Execution execution, Collection<FederationSearcher.Target> targets, Result mergedResults)
private Optional<Result> search(Query query, Execution execution, FederationSearcher.Target target)
private FederationResult search(Query query, Execution execution, Collection<FederationSearcher.Target> targets)
private FutureResult searchAsynchronously(Query query, Execution execution, FederationSearcher.Window window, FederationSearcher.Target target)
private Query cloneFederationQuery(Query query, FederationSearcher.Window window, long timeout, FederationSearcher.Target target)
private Query createFederationQuery(Query query, Query outgoing, FederationSearcher.Window window, long timeout, FederationSearcher.Target target)
private void propagatePerSourceQueryProperties(Query original, Query outgoing, FederationSearcher.Window window, String sourceName, String providerName, com.yahoo.processing.request.CompoundName[] queryProperties)
private Object getSourceOrProviderProperty(Query query, com.yahoo.processing.request.CompoundName propertyName, String sourceName, String providerName, Object defaultValue)
private Object getProperty(Query query, FederationSearcher.CompoundKey key)
private ErrorMessage missingSearchChainsErrorMessage(List<UnresolvedSearchChainException> unresolvedSearchChainExceptions)
private Set<String> getMessagesSet(List<UnresolvedSearchChainException> unresolvedSearchChainExceptions)
private void warnIfUnresolvedSearchChains(List<UnresolvedSearchChainException> missingTargets, HitGroup errorHitGroup)
public Collection<ForkingSearcher.CommentedSearchChain> getSearchChainsForwarded(SearchChainRegistry registry)
ForkingSearcher
getSearchChainsForwarded
in class ForkingSearcher
private ForkingSearcher.CommentedSearchChain commentedSearchChain(SingleTarget singleTarget, SearchChainRegistry registry)
private List<ForkingSearcher.CommentedSearchChain> commentedSourceProviderSearchChains(SourcesTarget sourcesTarget, SearchChainRegistry registry)
public static Properties getSourceProperties(Query query)
public void fill(Result result, String summaryClass, Execution execution)
Searcher
This needs to be overridden by federating searchers to contact search sources again by propagating the fill call down through the search chain, and by source searchers which talks to fill capable backends to request the data to be filled. Other searchers do not need to override this.
private void addResultsToFill(HitGroup hitGroup, Result result, String summaryClass, FederationSearcher.UniqueExecutionsToResults uniqueExecutionsToResults)
private Result getSearchChainGroup(Hit hit, Result result, FederationSearcher.UniqueExecutionsToResults uniqueExecutionsToResults)
private HitOrderer dirtyCopyIfModifiedOrderer(HitGroup group, HitOrderer orderer)
group
- The merging hitgroup to be updated if necessaryorderer
- The per provider hit orderer.private com.yahoo.errorhandling.Results<SearchChainInvocationSpec,UnresolvedSearchChainException> getTargets(Set<String> sources, Properties properties, IndexFacts indexFacts)
private com.yahoo.errorhandling.Results<SearchChainInvocationSpec,UnresolvedSearchChainException> resolveSources(Set<String> sources, Properties properties, IndexFacts indexFacts)
public com.yahoo.errorhandling.Results<SearchChainInvocationSpec,UnresolvedSearchChainException> defaultSearchChains(Properties sourceToProviderMap)
private com.yahoo.component.ComponentSpecification asSourceSpec(String source)
private void traceTargets(Query query, Collection<FederationSearcher.Target> targets)
private boolean shouldExecuteTargetLongerThanThread(Query query, FederationSearcher.Target target)
private static void addSearchChainTimedOutError(Query query, com.yahoo.component.ComponentId searchChainId)
private void mergeResult(Query query, FederationSearcher.Target target, Result mergedResults, Result result)
private com.yahoo.errorhandling.Results<FederationSearcher.Target,ErrorMessage> resolveSearchChains(Collection<SearchChainInvocationSpec> prunedTargets, SearchChainRegistry registry)
private static <T> List<FederationSearcher.Target> getAdditionalTargets(Query query, Execution execution, TargetSelector<T> targetSelector)
private Collection<SearchChainInvocationSpec> pruneTargetsWithoutDocumentTypes(Set<String> restrict, List<SearchChainInvocationSpec> targets)
private boolean documentTypeIntersectionIsNonEmpty(Set<String> restrict, SearchChainInvocationSpec target)
Copyright © 2018. All rights reserved.