mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-03-27 18:38:41 +00:00
Merge pull request #15761 from nik9000/more_remove_inject
Don't use guice for QueryParsers
This commit is contained in:
commit
63090f5d4b
@ -19,6 +19,10 @@
|
||||
|
||||
package org.elasticsearch.client.transport;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.elasticsearch.Version;
|
||||
import org.elasticsearch.action.Action;
|
||||
import org.elasticsearch.action.ActionListener;
|
||||
@ -36,6 +40,7 @@ import org.elasticsearch.common.component.LifecycleComponent;
|
||||
import org.elasticsearch.common.inject.Injector;
|
||||
import org.elasticsearch.common.inject.Module;
|
||||
import org.elasticsearch.common.inject.ModulesBuilder;
|
||||
import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
|
||||
import org.elasticsearch.common.network.NetworkModule;
|
||||
import org.elasticsearch.common.network.NetworkService;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
@ -54,10 +59,6 @@ import org.elasticsearch.threadpool.ThreadPoolModule;
|
||||
import org.elasticsearch.transport.TransportService;
|
||||
import org.elasticsearch.transport.netty.NettyTransport;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import static org.elasticsearch.common.settings.Settings.settingsBuilder;
|
||||
|
||||
/**
|
||||
@ -128,6 +129,7 @@ public class TransportClient extends AbstractClient {
|
||||
final ThreadPool threadPool = new ThreadPool(settings);
|
||||
final NetworkService networkService = new NetworkService(settings);
|
||||
final SettingsFilter settingsFilter = new SettingsFilter(settings);
|
||||
NamedWriteableRegistry namedWriteableRegistry = new NamedWriteableRegistry();
|
||||
boolean success = false;
|
||||
try {
|
||||
ModulesBuilder modules = new ModulesBuilder();
|
||||
@ -138,10 +140,10 @@ public class TransportClient extends AbstractClient {
|
||||
}
|
||||
modules.add(new PluginsModule(pluginsService));
|
||||
modules.add(new SettingsModule(this.settings, settingsFilter ));
|
||||
modules.add(new NetworkModule(networkService, this.settings, true));
|
||||
modules.add(new NetworkModule(networkService, this.settings, true, namedWriteableRegistry));
|
||||
modules.add(new ClusterNameModule(this.settings));
|
||||
modules.add(new ThreadPoolModule(threadPool));
|
||||
modules.add(new SearchModule() {
|
||||
modules.add(new SearchModule(settings, namedWriteableRegistry) {
|
||||
@Override
|
||||
protected void configure() {
|
||||
// noop
|
||||
|
@ -36,7 +36,7 @@ public class CircleBuilder extends ShapeBuilder {
|
||||
public static final String FIELD_RADIUS = "radius";
|
||||
public static final GeoShapeType TYPE = GeoShapeType.CIRCLE;
|
||||
|
||||
static final CircleBuilder PROTOTYPE = new CircleBuilder();
|
||||
public static final CircleBuilder PROTOTYPE = new CircleBuilder();
|
||||
|
||||
private DistanceUnit unit = DistanceUnit.DEFAULT;
|
||||
private double radius;
|
||||
|
@ -33,7 +33,7 @@ public class EnvelopeBuilder extends ShapeBuilder {
|
||||
|
||||
public static final GeoShapeType TYPE = GeoShapeType.ENVELOPE;
|
||||
|
||||
static final EnvelopeBuilder PROTOTYPE = new EnvelopeBuilder(new Coordinate(-1.0, 1.0), new Coordinate(1.0, -1.0));
|
||||
public static final EnvelopeBuilder PROTOTYPE = new EnvelopeBuilder(new Coordinate(-1.0, 1.0), new Coordinate(1.0, -1.0));
|
||||
|
||||
private Coordinate topLeft;
|
||||
private Coordinate bottomRight;
|
||||
|
@ -36,7 +36,7 @@ public class GeometryCollectionBuilder extends ShapeBuilder {
|
||||
|
||||
public static final GeoShapeType TYPE = GeoShapeType.GEOMETRYCOLLECTION;
|
||||
|
||||
static final GeometryCollectionBuilder PROTOTYPE = new GeometryCollectionBuilder();
|
||||
public static final GeometryCollectionBuilder PROTOTYPE = new GeometryCollectionBuilder();
|
||||
|
||||
protected final ArrayList<ShapeBuilder> shapes = new ArrayList<>();
|
||||
|
||||
|
@ -57,7 +57,7 @@ public class LineStringBuilder extends CoordinateCollection<LineStringBuilder> {
|
||||
|
||||
public static final GeoShapeType TYPE = GeoShapeType.LINESTRING;
|
||||
|
||||
static final LineStringBuilder PROTOTYPE = new LineStringBuilder(new CoordinatesBuilder().coordinate(0.0, 0.0).coordinate(1.0, 1.0));
|
||||
public static final LineStringBuilder PROTOTYPE = new LineStringBuilder(new CoordinatesBuilder().coordinate(0.0, 0.0).coordinate(1.0, 1.0));
|
||||
|
||||
@Override
|
||||
public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException {
|
||||
|
@ -37,7 +37,7 @@ public class MultiLineStringBuilder extends ShapeBuilder {
|
||||
|
||||
public static final GeoShapeType TYPE = GeoShapeType.MULTILINESTRING;
|
||||
|
||||
static final MultiLineStringBuilder PROTOTYPE = new MultiLineStringBuilder();
|
||||
public static final MultiLineStringBuilder PROTOTYPE = new MultiLineStringBuilder();
|
||||
|
||||
private final ArrayList<LineStringBuilder> lines = new ArrayList<>();
|
||||
|
||||
|
@ -37,7 +37,7 @@ public class MultiPointBuilder extends CoordinateCollection<MultiPointBuilder> {
|
||||
|
||||
public static final GeoShapeType TYPE = GeoShapeType.MULTIPOINT;
|
||||
|
||||
final static MultiPointBuilder PROTOTYPE = new MultiPointBuilder(new CoordinatesBuilder().coordinate(0.0, 0.0).build());
|
||||
public static final MultiPointBuilder PROTOTYPE = new MultiPointBuilder(new CoordinatesBuilder().coordinate(0.0, 0.0).build());
|
||||
|
||||
/**
|
||||
* Create a new {@link MultiPointBuilder}.
|
||||
|
@ -36,7 +36,7 @@ import java.util.Objects;
|
||||
public class MultiPolygonBuilder extends ShapeBuilder {
|
||||
|
||||
public static final GeoShapeType TYPE = GeoShapeType.MULTIPOLYGON;
|
||||
static final MultiPolygonBuilder PROTOTYPE = new MultiPolygonBuilder();
|
||||
public static final MultiPolygonBuilder PROTOTYPE = new MultiPolygonBuilder();
|
||||
|
||||
private final ArrayList<PolygonBuilder> polygons = new ArrayList<>();
|
||||
|
||||
|
@ -32,7 +32,7 @@ import java.util.Objects;
|
||||
public class PointBuilder extends ShapeBuilder {
|
||||
|
||||
public static final GeoShapeType TYPE = GeoShapeType.POINT;
|
||||
static final PointBuilder PROTOTYPE = new PointBuilder();
|
||||
public static final PointBuilder PROTOTYPE = new PointBuilder();
|
||||
|
||||
private Coordinate coordinate;
|
||||
|
||||
|
@ -53,7 +53,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
|
||||
public class PolygonBuilder extends ShapeBuilder {
|
||||
|
||||
public static final GeoShapeType TYPE = GeoShapeType.POLYGON;
|
||||
static final PolygonBuilder PROTOTYPE = new PolygonBuilder(new CoordinatesBuilder().coordinate(0.0, 0.0).coordinate(0.0, 1.0)
|
||||
public static final PolygonBuilder PROTOTYPE = new PolygonBuilder(new CoordinatesBuilder().coordinate(0.0, 0.0).coordinate(0.0, 1.0)
|
||||
.coordinate(1.0, 0.0).coordinate(0.0, 0.0));
|
||||
|
||||
private static final Coordinate[][] EMPTY = new Coordinate[0][];
|
||||
|
@ -1,45 +0,0 @@
|
||||
/*
|
||||
* Licensed to Elasticsearch under one or more contributor
|
||||
* license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright
|
||||
* ownership. Elasticsearch licenses this file to you under
|
||||
* the Apache License, Version 2.0 (the "License"); you may
|
||||
* not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.common.geo.builders;
|
||||
|
||||
import org.elasticsearch.common.geo.ShapesAvailability;
|
||||
import org.elasticsearch.common.inject.Inject;
|
||||
import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
|
||||
|
||||
/**
|
||||
* Register the shape builder prototypes with the {@link NamedWriteableRegistry}
|
||||
*/
|
||||
public class ShapeBuilderRegistry {
|
||||
|
||||
@Inject
|
||||
public ShapeBuilderRegistry(NamedWriteableRegistry namedWriteableRegistry) {
|
||||
if (ShapesAvailability.JTS_AVAILABLE && ShapesAvailability.SPATIAL4J_AVAILABLE) {
|
||||
namedWriteableRegistry.registerPrototype(ShapeBuilder.class, PointBuilder.PROTOTYPE);
|
||||
namedWriteableRegistry.registerPrototype(ShapeBuilder.class, CircleBuilder.PROTOTYPE);
|
||||
namedWriteableRegistry.registerPrototype(ShapeBuilder.class, EnvelopeBuilder.PROTOTYPE);
|
||||
namedWriteableRegistry.registerPrototype(ShapeBuilder.class, MultiPointBuilder.PROTOTYPE);
|
||||
namedWriteableRegistry.registerPrototype(ShapeBuilder.class, LineStringBuilder.PROTOTYPE);
|
||||
namedWriteableRegistry.registerPrototype(ShapeBuilder.class, MultiLineStringBuilder.PROTOTYPE);
|
||||
namedWriteableRegistry.registerPrototype(ShapeBuilder.class, PolygonBuilder.PROTOTYPE);
|
||||
namedWriteableRegistry.registerPrototype(ShapeBuilder.class, MultiPolygonBuilder.PROTOTYPE);
|
||||
namedWriteableRegistry.registerPrototype(ShapeBuilder.class, GeometryCollectionBuilder.PROTOTYPE);
|
||||
}
|
||||
}
|
||||
}
|
@ -19,6 +19,9 @@
|
||||
|
||||
package org.elasticsearch.common.network;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import org.elasticsearch.client.support.Headers;
|
||||
import org.elasticsearch.client.transport.TransportClientNodesService;
|
||||
import org.elasticsearch.client.transport.support.TransportProxyClient;
|
||||
@ -135,9 +138,6 @@ import org.elasticsearch.transport.TransportService;
|
||||
import org.elasticsearch.transport.local.LocalTransport;
|
||||
import org.elasticsearch.transport.netty.NettyTransport;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* A module to handle registering and binding all network related classes.
|
||||
*/
|
||||
@ -291,6 +291,7 @@ public class NetworkModule extends AbstractModule {
|
||||
private final ExtensionPoint.ClassSet<RestHandler> restHandlers = new ExtensionPoint.ClassSet<>("rest_handler", RestHandler.class);
|
||||
// we must separate the cat rest handlers so RestCatAction can collect them...
|
||||
private final ExtensionPoint.ClassSet<AbstractCatAction> catHandlers = new ExtensionPoint.ClassSet<>("cat_handler", AbstractCatAction.class);
|
||||
private final NamedWriteableRegistry namedWriteableRegistry;
|
||||
|
||||
/**
|
||||
* Creates a network module that custom networking classes can be plugged into.
|
||||
@ -298,11 +299,13 @@ public class NetworkModule extends AbstractModule {
|
||||
* @param networkService A constructed network service object to bind.
|
||||
* @param settings The settings for the node
|
||||
* @param transportClient True if only transport classes should be allowed to be registered, false otherwise.
|
||||
* @param namedWriteableRegistry registry for named writeables for use during streaming
|
||||
*/
|
||||
public NetworkModule(NetworkService networkService, Settings settings, boolean transportClient) {
|
||||
public NetworkModule(NetworkService networkService, Settings settings, boolean transportClient, NamedWriteableRegistry namedWriteableRegistry) {
|
||||
this.networkService = networkService;
|
||||
this.settings = settings;
|
||||
this.transportClient = transportClient;
|
||||
this.namedWriteableRegistry = namedWriteableRegistry;
|
||||
registerTransportService(NETTY_TRANSPORT, TransportService.class);
|
||||
registerTransport(LOCAL_TRANSPORT, LocalTransport.class);
|
||||
registerTransport(NETTY_TRANSPORT, NettyTransport.class);
|
||||
@ -354,7 +357,7 @@ public class NetworkModule extends AbstractModule {
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(NetworkService.class).toInstance(networkService);
|
||||
bind(NamedWriteableRegistry.class).asEagerSingleton();
|
||||
bind(NamedWriteableRegistry.class).toInstance(namedWriteableRegistry);
|
||||
|
||||
transportServiceTypes.bindType(binder(), settings, TRANSPORT_SERVICE_TYPE_KEY, NETTY_TRANSPORT);
|
||||
String defaultTransport = DiscoveryNode.localNode(settings) ? LOCAL_TRANSPORT : NETTY_TRANSPORT;
|
||||
|
@ -19,17 +19,14 @@
|
||||
|
||||
package org.elasticsearch.index.query;
|
||||
|
||||
import org.apache.lucene.search.BooleanQuery;
|
||||
import org.elasticsearch.common.ParseField;
|
||||
import org.elasticsearch.common.ParsingException;
|
||||
import org.elasticsearch.common.inject.Inject;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
import org.elasticsearch.common.xcontent.XContentParser;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.elasticsearch.common.ParseField;
|
||||
import org.elasticsearch.common.ParsingException;
|
||||
import org.elasticsearch.common.xcontent.XContentParser;
|
||||
|
||||
/**
|
||||
* Parser for bool query
|
||||
*/
|
||||
@ -45,11 +42,6 @@ public class BoolQueryParser implements QueryParser<BoolQueryBuilder> {
|
||||
public static final ParseField MINIMUM_NUMBER_SHOULD_MATCH = new ParseField("minimum_number_should_match");
|
||||
public static final ParseField ADJUST_PURE_NEGATIVE = new ParseField("adjust_pure_negative");
|
||||
|
||||
@Inject
|
||||
public BoolQueryParser(Settings settings) {
|
||||
BooleanQuery.setMaxClauseCount(settings.getAsInt("index.query.bool.max_clause_count", settings.getAsInt("indices.query.bool.max_clause_count", BooleanQuery.getMaxClauseCount())));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] names() {
|
||||
return new String[]{BoolQueryBuilder.NAME};
|
||||
|
@ -19,15 +19,14 @@
|
||||
|
||||
package org.elasticsearch.index.query;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.lucene.search.join.ScoreMode;
|
||||
import org.elasticsearch.common.ParseField;
|
||||
import org.elasticsearch.common.ParsingException;
|
||||
import org.elasticsearch.common.Strings;
|
||||
import org.elasticsearch.common.xcontent.XContentParser;
|
||||
import org.elasticsearch.index.query.support.QueryInnerHits;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class NestedQueryParser implements QueryParser<NestedQueryBuilder> {
|
||||
|
||||
private static final NestedQueryBuilder PROTOTYPE = new NestedQueryBuilder("", EmptyQueryBuilder.PROTOTYPE);
|
||||
@ -38,7 +37,7 @@ public class NestedQueryParser implements QueryParser<NestedQueryBuilder> {
|
||||
|
||||
@Override
|
||||
public String[] names() {
|
||||
return new String[]{NestedQueryBuilder.NAME, Strings.toCamelCase(NestedQueryBuilder.NAME)};
|
||||
return new String[]{NestedQueryBuilder.NAME};
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -19,10 +19,13 @@
|
||||
|
||||
package org.elasticsearch.index.query.functionscore;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.elasticsearch.common.ParseField;
|
||||
import org.elasticsearch.common.ParsingException;
|
||||
import org.elasticsearch.common.Strings;
|
||||
import org.elasticsearch.common.inject.Inject;
|
||||
import org.elasticsearch.common.lucene.search.function.CombineFunction;
|
||||
import org.elasticsearch.common.lucene.search.function.FiltersFunctionScoreQuery;
|
||||
import org.elasticsearch.common.lucene.search.function.FunctionScoreQuery;
|
||||
@ -36,10 +39,6 @@ import org.elasticsearch.index.query.QueryParseContext;
|
||||
import org.elasticsearch.index.query.QueryParser;
|
||||
import org.elasticsearch.index.query.functionscore.weight.WeightBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Parser for function_score query
|
||||
*/
|
||||
@ -54,7 +53,6 @@ public class FunctionScoreQueryParser implements QueryParser<FunctionScoreQueryB
|
||||
|
||||
private final ScoreFunctionParserMapper functionParserMapper;
|
||||
|
||||
@Inject
|
||||
public FunctionScoreQueryParser(ScoreFunctionParserMapper functionParserMapper) {
|
||||
this.functionParserMapper = functionParserMapper;
|
||||
}
|
||||
|
@ -19,65 +19,30 @@
|
||||
|
||||
package org.elasticsearch.index.query.functionscore;
|
||||
|
||||
import org.elasticsearch.common.ParsingException;
|
||||
import org.elasticsearch.common.inject.Inject;
|
||||
import org.elasticsearch.common.io.stream.NamedWriteable;
|
||||
import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
|
||||
import org.elasticsearch.common.xcontent.XContentLocation;
|
||||
import org.elasticsearch.index.query.functionscore.exp.ExponentialDecayFunctionParser;
|
||||
import org.elasticsearch.index.query.functionscore.fieldvaluefactor.FieldValueFactorFunctionParser;
|
||||
import org.elasticsearch.index.query.functionscore.gauss.GaussDecayFunctionParser;
|
||||
import org.elasticsearch.index.query.functionscore.lin.LinearDecayFunctionParser;
|
||||
import org.elasticsearch.index.query.functionscore.random.RandomScoreFunctionParser;
|
||||
import org.elasticsearch.index.query.functionscore.script.ScriptScoreFunctionParser;
|
||||
import org.elasticsearch.index.query.functionscore.weight.WeightBuilder;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.elasticsearch.common.ParsingException;
|
||||
import org.elasticsearch.common.xcontent.XContentLocation;
|
||||
|
||||
import static java.util.Collections.unmodifiableMap;
|
||||
|
||||
public class ScoreFunctionParserMapper {
|
||||
|
||||
protected Map<String, ScoreFunctionParser<?>> functionParsers;
|
||||
|
||||
@Inject
|
||||
public ScoreFunctionParserMapper(Set<ScoreFunctionParser> parsers, NamedWriteableRegistry namedWriteableRegistry) {
|
||||
Map<String, ScoreFunctionParser<?>> map = new HashMap<>();
|
||||
// built-in parsers
|
||||
addParser(new ScriptScoreFunctionParser(), map, namedWriteableRegistry);
|
||||
addParser(new GaussDecayFunctionParser(), map, namedWriteableRegistry);
|
||||
addParser(new LinearDecayFunctionParser(), map, namedWriteableRegistry);
|
||||
addParser(new ExponentialDecayFunctionParser(), map, namedWriteableRegistry);
|
||||
addParser(new RandomScoreFunctionParser(), map, namedWriteableRegistry);
|
||||
addParser(new FieldValueFactorFunctionParser(), map, namedWriteableRegistry);
|
||||
for (ScoreFunctionParser<?> scoreFunctionParser : parsers) {
|
||||
addParser(scoreFunctionParser, map, namedWriteableRegistry);
|
||||
}
|
||||
this.functionParsers = Collections.unmodifiableMap(map);
|
||||
//weight doesn't have its own parser, so every function supports it out of the box.
|
||||
//Can be a single function too when not associated to any other function, which is why it needs to be registered manually here.
|
||||
namedWriteableRegistry.registerPrototype(ScoreFunctionBuilder.class, new WeightBuilder());
|
||||
public ScoreFunctionParserMapper(Map<String, ScoreFunctionParser<?>> functionParsers) {
|
||||
this.functionParsers = unmodifiableMap(functionParsers);
|
||||
}
|
||||
|
||||
public ScoreFunctionParser get(XContentLocation contentLocation, String parserName) {
|
||||
ScoreFunctionParser functionParser = get(parserName);
|
||||
public ScoreFunctionParser<?> get(XContentLocation contentLocation, String parserName) {
|
||||
ScoreFunctionParser<?> functionParser = get(parserName);
|
||||
if (functionParser == null) {
|
||||
throw new ParsingException(contentLocation, "No function with the name [" + parserName + "] is registered.");
|
||||
}
|
||||
return functionParser;
|
||||
}
|
||||
|
||||
private ScoreFunctionParser get(String parserName) {
|
||||
private ScoreFunctionParser<?> get(String parserName) {
|
||||
return functionParsers.get(parserName);
|
||||
}
|
||||
|
||||
private static void addParser(ScoreFunctionParser<? extends ScoreFunctionBuilder> scoreFunctionParser, Map<String, ScoreFunctionParser<?>> map, NamedWriteableRegistry namedWriteableRegistry) {
|
||||
for (String name : scoreFunctionParser.getNames()) {
|
||||
map.put(name, scoreFunctionParser);
|
||||
|
||||
}
|
||||
@SuppressWarnings("unchecked") NamedWriteable<? extends ScoreFunctionBuilder> sfb = scoreFunctionParser.getBuilderPrototype();
|
||||
namedWriteableRegistry.registerPrototype(ScoreFunctionBuilder.class, sfb);
|
||||
}
|
||||
}
|
||||
|
@ -22,9 +22,7 @@ package org.elasticsearch.indices;
|
||||
import org.elasticsearch.action.update.UpdateHelper;
|
||||
import org.elasticsearch.cluster.metadata.MetaDataIndexUpgradeService;
|
||||
import org.elasticsearch.common.geo.ShapesAvailability;
|
||||
import org.elasticsearch.common.geo.builders.ShapeBuilderRegistry;
|
||||
import org.elasticsearch.common.inject.AbstractModule;
|
||||
import org.elasticsearch.common.util.ExtensionPoint;
|
||||
import org.elasticsearch.index.NodeServicesProvider;
|
||||
import org.elasticsearch.index.mapper.Mapper;
|
||||
import org.elasticsearch.index.mapper.MetadataFieldMapper;
|
||||
@ -57,52 +55,6 @@ import org.elasticsearch.index.mapper.internal.VersionFieldMapper;
|
||||
import org.elasticsearch.index.mapper.ip.IpFieldMapper;
|
||||
import org.elasticsearch.index.mapper.object.ObjectMapper;
|
||||
import org.elasticsearch.index.percolator.PercolatorFieldMapper;
|
||||
import org.elasticsearch.index.query.BoolQueryParser;
|
||||
import org.elasticsearch.index.query.BoostingQueryParser;
|
||||
import org.elasticsearch.index.query.CommonTermsQueryParser;
|
||||
import org.elasticsearch.index.query.ConstantScoreQueryParser;
|
||||
import org.elasticsearch.index.query.DisMaxQueryParser;
|
||||
import org.elasticsearch.index.query.ExistsQueryParser;
|
||||
import org.elasticsearch.index.query.FieldMaskingSpanQueryParser;
|
||||
import org.elasticsearch.index.query.FuzzyQueryParser;
|
||||
import org.elasticsearch.index.query.GeoBoundingBoxQueryParser;
|
||||
import org.elasticsearch.index.query.GeoDistanceQueryParser;
|
||||
import org.elasticsearch.index.query.GeoDistanceRangeQueryParser;
|
||||
import org.elasticsearch.index.query.GeoPolygonQueryParser;
|
||||
import org.elasticsearch.index.query.GeoShapeQueryParser;
|
||||
import org.elasticsearch.index.query.GeohashCellQuery;
|
||||
import org.elasticsearch.index.query.HasChildQueryParser;
|
||||
import org.elasticsearch.index.query.HasParentQueryParser;
|
||||
import org.elasticsearch.index.query.IdsQueryParser;
|
||||
import org.elasticsearch.index.query.IndicesQueryParser;
|
||||
import org.elasticsearch.index.query.MatchAllQueryParser;
|
||||
import org.elasticsearch.index.query.MatchNoneQueryParser;
|
||||
import org.elasticsearch.index.query.MatchQueryParser;
|
||||
import org.elasticsearch.index.query.MoreLikeThisQueryParser;
|
||||
import org.elasticsearch.index.query.MultiMatchQueryParser;
|
||||
import org.elasticsearch.index.query.NestedQueryParser;
|
||||
import org.elasticsearch.index.query.PrefixQueryParser;
|
||||
import org.elasticsearch.index.query.QueryParser;
|
||||
import org.elasticsearch.index.query.QueryStringQueryParser;
|
||||
import org.elasticsearch.index.query.RangeQueryParser;
|
||||
import org.elasticsearch.index.query.RegexpQueryParser;
|
||||
import org.elasticsearch.index.query.ScriptQueryParser;
|
||||
import org.elasticsearch.index.query.SimpleQueryStringParser;
|
||||
import org.elasticsearch.index.query.SpanContainingQueryParser;
|
||||
import org.elasticsearch.index.query.SpanFirstQueryParser;
|
||||
import org.elasticsearch.index.query.SpanMultiTermQueryParser;
|
||||
import org.elasticsearch.index.query.SpanNearQueryParser;
|
||||
import org.elasticsearch.index.query.SpanNotQueryParser;
|
||||
import org.elasticsearch.index.query.SpanOrQueryParser;
|
||||
import org.elasticsearch.index.query.SpanTermQueryParser;
|
||||
import org.elasticsearch.index.query.SpanWithinQueryParser;
|
||||
import org.elasticsearch.index.query.TemplateQueryParser;
|
||||
import org.elasticsearch.index.query.TermQueryParser;
|
||||
import org.elasticsearch.index.query.TermsQueryParser;
|
||||
import org.elasticsearch.index.query.TypeQueryParser;
|
||||
import org.elasticsearch.index.query.WildcardQueryParser;
|
||||
import org.elasticsearch.index.query.WrapperQueryParser;
|
||||
import org.elasticsearch.index.query.functionscore.FunctionScoreQueryParser;
|
||||
import org.elasticsearch.index.termvectors.TermVectorsService;
|
||||
import org.elasticsearch.indices.cache.query.IndicesQueryCache;
|
||||
import org.elasticsearch.indices.cache.request.IndicesRequestCache;
|
||||
@ -111,7 +63,6 @@ import org.elasticsearch.indices.fielddata.cache.IndicesFieldDataCache;
|
||||
import org.elasticsearch.indices.fielddata.cache.IndicesFieldDataCacheListener;
|
||||
import org.elasticsearch.indices.flush.SyncedFlushService;
|
||||
import org.elasticsearch.indices.mapper.MapperRegistry;
|
||||
import org.elasticsearch.indices.query.IndicesQueriesRegistry;
|
||||
import org.elasticsearch.indices.recovery.RecoverySettings;
|
||||
import org.elasticsearch.indices.recovery.RecoverySource;
|
||||
import org.elasticsearch.indices.recovery.RecoveryTarget;
|
||||
@ -126,11 +77,6 @@ import java.util.Map;
|
||||
* Configures classes and services that are shared by indices on each node.
|
||||
*/
|
||||
public class IndicesModule extends AbstractModule {
|
||||
|
||||
|
||||
private final ExtensionPoint.ClassSet<QueryParser> queryParsers
|
||||
= new ExtensionPoint.ClassSet<>("query_parser", QueryParser.class);
|
||||
|
||||
private final Map<String, Mapper.TypeParser> mapperParsers
|
||||
= new LinkedHashMap<>();
|
||||
// Use a LinkedHashMap for metadataMappers because iteration order matters
|
||||
@ -138,62 +84,10 @@ public class IndicesModule extends AbstractModule {
|
||||
= new LinkedHashMap<>();
|
||||
|
||||
public IndicesModule() {
|
||||
registerBuiltinQueryParsers();
|
||||
registerBuiltInMappers();
|
||||
registerBuiltInMetadataMappers();
|
||||
}
|
||||
|
||||
private void registerBuiltinQueryParsers() {
|
||||
registerQueryParser(MatchQueryParser.class);
|
||||
registerQueryParser(MultiMatchQueryParser.class);
|
||||
registerQueryParser(NestedQueryParser.class);
|
||||
registerQueryParser(HasChildQueryParser.class);
|
||||
registerQueryParser(HasParentQueryParser.class);
|
||||
registerQueryParser(DisMaxQueryParser.class);
|
||||
registerQueryParser(IdsQueryParser.class);
|
||||
registerQueryParser(MatchAllQueryParser.class);
|
||||
registerQueryParser(QueryStringQueryParser.class);
|
||||
registerQueryParser(BoostingQueryParser.class);
|
||||
registerQueryParser(BoolQueryParser.class);
|
||||
registerQueryParser(TermQueryParser.class);
|
||||
registerQueryParser(TermsQueryParser.class);
|
||||
registerQueryParser(FuzzyQueryParser.class);
|
||||
registerQueryParser(RegexpQueryParser.class);
|
||||
registerQueryParser(RangeQueryParser.class);
|
||||
registerQueryParser(PrefixQueryParser.class);
|
||||
registerQueryParser(WildcardQueryParser.class);
|
||||
registerQueryParser(ConstantScoreQueryParser.class);
|
||||
registerQueryParser(SpanTermQueryParser.class);
|
||||
registerQueryParser(SpanNotQueryParser.class);
|
||||
registerQueryParser(SpanWithinQueryParser.class);
|
||||
registerQueryParser(SpanContainingQueryParser.class);
|
||||
registerQueryParser(FieldMaskingSpanQueryParser.class);
|
||||
registerQueryParser(SpanFirstQueryParser.class);
|
||||
registerQueryParser(SpanNearQueryParser.class);
|
||||
registerQueryParser(SpanOrQueryParser.class);
|
||||
registerQueryParser(MoreLikeThisQueryParser.class);
|
||||
registerQueryParser(WrapperQueryParser.class);
|
||||
registerQueryParser(IndicesQueryParser.class);
|
||||
registerQueryParser(CommonTermsQueryParser.class);
|
||||
registerQueryParser(SpanMultiTermQueryParser.class);
|
||||
registerQueryParser(FunctionScoreQueryParser.class);
|
||||
registerQueryParser(SimpleQueryStringParser.class);
|
||||
registerQueryParser(TemplateQueryParser.class);
|
||||
registerQueryParser(TypeQueryParser.class);
|
||||
registerQueryParser(ScriptQueryParser.class);
|
||||
registerQueryParser(GeoDistanceQueryParser.class);
|
||||
registerQueryParser(GeoDistanceRangeQueryParser.class);
|
||||
registerQueryParser(GeoBoundingBoxQueryParser.class);
|
||||
registerQueryParser(GeohashCellQuery.Parser.class);
|
||||
registerQueryParser(GeoPolygonQueryParser.class);
|
||||
registerQueryParser(ExistsQueryParser.class);
|
||||
registerQueryParser(MatchNoneQueryParser.class);
|
||||
|
||||
if (ShapesAvailability.JTS_AVAILABLE && ShapesAvailability.SPATIAL4J_AVAILABLE) {
|
||||
registerQueryParser(GeoShapeQueryParser.class);
|
||||
}
|
||||
}
|
||||
|
||||
private void registerBuiltInMappers() {
|
||||
registerMapper(ByteFieldMapper.CONTENT_TYPE, new ByteFieldMapper.TypeParser());
|
||||
registerMapper(ShortFieldMapper.CONTENT_TYPE, new ShortFieldMapper.TypeParser());
|
||||
@ -237,10 +131,6 @@ public class IndicesModule extends AbstractModule {
|
||||
// last so that it can see all other mappers, including those coming from plugins
|
||||
}
|
||||
|
||||
public void registerQueryParser(Class<? extends QueryParser> queryParser) {
|
||||
queryParsers.registerExtension(queryParser);
|
||||
}
|
||||
|
||||
/**
|
||||
* Register a mapper for the given type.
|
||||
*/
|
||||
@ -263,7 +153,6 @@ public class IndicesModule extends AbstractModule {
|
||||
|
||||
@Override
|
||||
protected void configure() {
|
||||
bindQueryParsersExtension();
|
||||
bindMapperExtension();
|
||||
|
||||
bind(IndicesService.class).asEagerSingleton();
|
||||
@ -284,7 +173,6 @@ public class IndicesModule extends AbstractModule {
|
||||
bind(IndicesFieldDataCacheListener.class).asEagerSingleton();
|
||||
bind(TermVectorsService.class).asEagerSingleton();
|
||||
bind(NodeServicesProvider.class).asEagerSingleton();
|
||||
bind(ShapeBuilderRegistry.class).asEagerSingleton();
|
||||
}
|
||||
|
||||
// public for testing
|
||||
@ -303,9 +191,4 @@ public class IndicesModule extends AbstractModule {
|
||||
protected void bindMapperExtension() {
|
||||
bind(MapperRegistry.class).toInstance(getMapperRegistry());
|
||||
}
|
||||
|
||||
protected void bindQueryParsersExtension() {
|
||||
queryParsers.bind(binder());
|
||||
bind(IndicesQueriesRegistry.class).asEagerSingleton();
|
||||
}
|
||||
}
|
||||
|
@ -19,39 +19,18 @@
|
||||
|
||||
package org.elasticsearch.indices.query;
|
||||
|
||||
import org.elasticsearch.common.component.AbstractComponent;
|
||||
import org.elasticsearch.common.inject.Inject;
|
||||
import org.elasticsearch.common.io.stream.NamedWriteable;
|
||||
import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
import org.elasticsearch.index.query.EmptyQueryBuilder;
|
||||
import org.elasticsearch.index.query.QueryBuilder;
|
||||
import org.elasticsearch.index.query.QueryParser;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import static java.util.Collections.unmodifiableMap;
|
||||
import org.elasticsearch.common.component.AbstractComponent;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
import org.elasticsearch.index.query.QueryParser;
|
||||
|
||||
public class IndicesQueriesRegistry extends AbstractComponent {
|
||||
private Map<String, QueryParser<?>> queryParsers;
|
||||
|
||||
@Inject
|
||||
public IndicesQueriesRegistry(Settings settings, Set<QueryParser> injectedQueryParsers, NamedWriteableRegistry namedWriteableRegistry) {
|
||||
public IndicesQueriesRegistry(Settings settings, Map<String, QueryParser<?>> queryParsers) {
|
||||
super(settings);
|
||||
Map<String, QueryParser<?>> queryParsers = new HashMap<>();
|
||||
for (@SuppressWarnings("unchecked") QueryParser<? extends QueryBuilder> queryParser : injectedQueryParsers) {
|
||||
for (String name : queryParser.names()) {
|
||||
queryParsers.put(name, queryParser);
|
||||
}
|
||||
@SuppressWarnings("unchecked") NamedWriteable<? extends QueryBuilder> qb = queryParser.getBuilderPrototype();
|
||||
namedWriteableRegistry.registerPrototype(QueryBuilder.class, qb);
|
||||
}
|
||||
// EmptyQueryBuilder is not registered as query parser but used internally.
|
||||
// We need to register it with the NamedWriteableRegistry in order to serialize it
|
||||
namedWriteableRegistry.registerPrototype(QueryBuilder.class, EmptyQueryBuilder.PROTOTYPE);
|
||||
this.queryParsers = unmodifiableMap(queryParsers);
|
||||
this.queryParsers = queryParsers;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -37,6 +37,7 @@ import org.elasticsearch.common.component.LifecycleComponent;
|
||||
import org.elasticsearch.common.inject.Injector;
|
||||
import org.elasticsearch.common.inject.Module;
|
||||
import org.elasticsearch.common.inject.ModulesBuilder;
|
||||
import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
|
||||
import org.elasticsearch.common.lease.Releasable;
|
||||
import org.elasticsearch.common.lease.Releasables;
|
||||
import org.elasticsearch.common.logging.ESLogger;
|
||||
@ -164,6 +165,7 @@ public class Node implements Releasable {
|
||||
final NetworkService networkService = new NetworkService(settings);
|
||||
final SettingsFilter settingsFilter = new SettingsFilter(settings);
|
||||
final ThreadPool threadPool = new ThreadPool(settings);
|
||||
NamedWriteableRegistry namedWriteableRegistry = new NamedWriteableRegistry();
|
||||
boolean success = false;
|
||||
try {
|
||||
final MonitorService monitorService = new MonitorService(settings, nodeEnvironment, threadPool);
|
||||
@ -178,7 +180,7 @@ public class Node implements Releasable {
|
||||
modules.add(new SettingsModule(this.settings, settingsFilter));
|
||||
modules.add(new EnvironmentModule(environment));
|
||||
modules.add(new NodeModule(this, monitorService));
|
||||
modules.add(new NetworkModule(networkService, settings, false));
|
||||
modules.add(new NetworkModule(networkService, settings, false, namedWriteableRegistry));
|
||||
modules.add(new ScriptModule(this.settings));
|
||||
modules.add(new NodeEnvironmentModule(nodeEnvironment));
|
||||
modules.add(new ClusterNameModule(this.settings));
|
||||
@ -186,7 +188,7 @@ public class Node implements Releasable {
|
||||
modules.add(new DiscoveryModule(this.settings));
|
||||
modules.add(new ClusterModule(this.settings));
|
||||
modules.add(new IndicesModule());
|
||||
modules.add(new SearchModule());
|
||||
modules.add(new SearchModule(settings, namedWriteableRegistry));
|
||||
modules.add(new ActionModule(false));
|
||||
modules.add(new GatewayModule(settings));
|
||||
modules.add(new NodeClientModule());
|
||||
|
@ -19,10 +19,89 @@
|
||||
|
||||
package org.elasticsearch.search;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import org.apache.lucene.search.BooleanQuery;
|
||||
import org.elasticsearch.common.geo.ShapesAvailability;
|
||||
import org.elasticsearch.common.geo.builders.CircleBuilder;
|
||||
import org.elasticsearch.common.geo.builders.EnvelopeBuilder;
|
||||
import org.elasticsearch.common.geo.builders.GeometryCollectionBuilder;
|
||||
import org.elasticsearch.common.geo.builders.LineStringBuilder;
|
||||
import org.elasticsearch.common.geo.builders.MultiLineStringBuilder;
|
||||
import org.elasticsearch.common.geo.builders.MultiPointBuilder;
|
||||
import org.elasticsearch.common.geo.builders.MultiPolygonBuilder;
|
||||
import org.elasticsearch.common.geo.builders.PointBuilder;
|
||||
import org.elasticsearch.common.geo.builders.PolygonBuilder;
|
||||
import org.elasticsearch.common.geo.builders.ShapeBuilder;
|
||||
import org.elasticsearch.common.inject.AbstractModule;
|
||||
import org.elasticsearch.common.inject.multibindings.Multibinder;
|
||||
import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
import org.elasticsearch.index.query.BoolQueryParser;
|
||||
import org.elasticsearch.index.query.BoostingQueryParser;
|
||||
import org.elasticsearch.index.query.CommonTermsQueryParser;
|
||||
import org.elasticsearch.index.query.ConstantScoreQueryParser;
|
||||
import org.elasticsearch.index.query.DisMaxQueryParser;
|
||||
import org.elasticsearch.index.query.EmptyQueryBuilder;
|
||||
import org.elasticsearch.index.query.ExistsQueryParser;
|
||||
import org.elasticsearch.index.query.FieldMaskingSpanQueryParser;
|
||||
import org.elasticsearch.index.query.FuzzyQueryParser;
|
||||
import org.elasticsearch.index.query.GeoBoundingBoxQueryParser;
|
||||
import org.elasticsearch.index.query.GeoDistanceQueryParser;
|
||||
import org.elasticsearch.index.query.GeoDistanceRangeQueryParser;
|
||||
import org.elasticsearch.index.query.GeoPolygonQueryParser;
|
||||
import org.elasticsearch.index.query.GeoShapeQueryParser;
|
||||
import org.elasticsearch.index.query.GeohashCellQuery;
|
||||
import org.elasticsearch.index.query.HasChildQueryParser;
|
||||
import org.elasticsearch.index.query.HasParentQueryParser;
|
||||
import org.elasticsearch.index.query.IdsQueryParser;
|
||||
import org.elasticsearch.index.query.IndicesQueryParser;
|
||||
import org.elasticsearch.index.query.MatchAllQueryParser;
|
||||
import org.elasticsearch.index.query.MatchNoneQueryParser;
|
||||
import org.elasticsearch.index.query.MatchQueryParser;
|
||||
import org.elasticsearch.index.query.MoreLikeThisQueryParser;
|
||||
import org.elasticsearch.index.query.MultiMatchQueryParser;
|
||||
import org.elasticsearch.index.query.NestedQueryParser;
|
||||
import org.elasticsearch.index.query.PrefixQueryParser;
|
||||
import org.elasticsearch.index.query.QueryBuilder;
|
||||
import org.elasticsearch.index.query.QueryParser;
|
||||
import org.elasticsearch.index.query.QueryStringQueryParser;
|
||||
import org.elasticsearch.index.query.RangeQueryParser;
|
||||
import org.elasticsearch.index.query.RegexpQueryParser;
|
||||
import org.elasticsearch.index.query.ScriptQueryParser;
|
||||
import org.elasticsearch.index.query.SimpleQueryStringParser;
|
||||
import org.elasticsearch.index.query.SpanContainingQueryParser;
|
||||
import org.elasticsearch.index.query.SpanFirstQueryParser;
|
||||
import org.elasticsearch.index.query.SpanMultiTermQueryParser;
|
||||
import org.elasticsearch.index.query.SpanNearQueryParser;
|
||||
import org.elasticsearch.index.query.SpanNotQueryParser;
|
||||
import org.elasticsearch.index.query.SpanOrQueryParser;
|
||||
import org.elasticsearch.index.query.SpanTermQueryParser;
|
||||
import org.elasticsearch.index.query.SpanWithinQueryParser;
|
||||
import org.elasticsearch.index.query.TemplateQueryParser;
|
||||
import org.elasticsearch.index.query.TermQueryParser;
|
||||
import org.elasticsearch.index.query.TermsQueryParser;
|
||||
import org.elasticsearch.index.query.TypeQueryParser;
|
||||
import org.elasticsearch.index.query.WildcardQueryParser;
|
||||
import org.elasticsearch.index.query.WrapperQueryParser;
|
||||
import org.elasticsearch.index.query.functionscore.FunctionScoreQueryParser;
|
||||
import org.elasticsearch.index.query.functionscore.ScoreFunctionBuilder;
|
||||
import org.elasticsearch.index.query.functionscore.ScoreFunctionParser;
|
||||
import org.elasticsearch.index.query.functionscore.ScoreFunctionParserMapper;
|
||||
import org.elasticsearch.index.query.functionscore.exp.ExponentialDecayFunctionParser;
|
||||
import org.elasticsearch.index.query.functionscore.fieldvaluefactor.FieldValueFactorFunctionParser;
|
||||
import org.elasticsearch.index.query.functionscore.gauss.GaussDecayFunctionParser;
|
||||
import org.elasticsearch.index.query.functionscore.lin.LinearDecayFunctionParser;
|
||||
import org.elasticsearch.index.query.functionscore.random.RandomScoreFunctionParser;
|
||||
import org.elasticsearch.index.query.functionscore.script.ScriptScoreFunctionParser;
|
||||
import org.elasticsearch.index.query.functionscore.weight.WeightBuilder;
|
||||
import org.elasticsearch.indices.query.IndicesQueriesRegistry;
|
||||
import org.elasticsearch.search.action.SearchServiceTransportAction;
|
||||
import org.elasticsearch.search.aggregations.AggregationParseElement;
|
||||
import org.elasticsearch.search.aggregations.AggregationPhase;
|
||||
@ -149,9 +228,6 @@ import org.elasticsearch.search.query.QueryPhase;
|
||||
import org.elasticsearch.search.suggest.Suggester;
|
||||
import org.elasticsearch.search.suggest.Suggesters;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
@ -161,14 +237,35 @@ public class SearchModule extends AbstractModule {
|
||||
private final Set<Class<? extends PipelineAggregator.Parser>> pipelineAggParsers = new HashSet<>();
|
||||
private final Highlighters highlighters = new Highlighters();
|
||||
private final Suggesters suggesters = new Suggesters();
|
||||
private final Set<Class<? extends ScoreFunctionParser>> functionScoreParsers = new HashSet<>();
|
||||
/**
|
||||
* Function score parsers constructed on registration. This is ok because
|
||||
* they don't have any dependencies.
|
||||
*/
|
||||
private final Map<String, ScoreFunctionParser<?>> functionScoreParsers = new HashMap<>();
|
||||
/**
|
||||
* Query parsers constructed at configure time. These have to be constructed
|
||||
* at configure time because they depend on things that are registered by
|
||||
* plugins (function score parsers).
|
||||
*/
|
||||
private final List<Supplier<QueryParser<?>>> queryParsers = new ArrayList<>();
|
||||
private final Set<Class<? extends FetchSubPhase>> fetchSubPhases = new HashSet<>();
|
||||
private final Set<Class<? extends SignificanceHeuristicParser>> heuristicParsers = new HashSet<>();
|
||||
private final Set<Class<? extends MovAvgModel.AbstractModelParser>> modelParsers = new HashSet<>();
|
||||
|
||||
private final Settings settings;
|
||||
private final NamedWriteableRegistry namedWriteableRegistry;
|
||||
|
||||
// pkg private so tests can mock
|
||||
Class<? extends SearchService> searchServiceImpl = SearchService.class;
|
||||
|
||||
public SearchModule(Settings settings, NamedWriteableRegistry namedWriteableRegistry) {
|
||||
this.settings = settings;
|
||||
this.namedWriteableRegistry = namedWriteableRegistry;
|
||||
|
||||
registerBuiltinFunctionScoreParsers();
|
||||
registerBuiltinQueryParsers();
|
||||
}
|
||||
|
||||
public void registerHighlighter(String key, Class<? extends Highlighter> clazz) {
|
||||
highlighters.registerExtension(key, clazz);
|
||||
}
|
||||
@ -177,8 +274,21 @@ public class SearchModule extends AbstractModule {
|
||||
suggesters.registerExtension(key, suggester);
|
||||
}
|
||||
|
||||
public void registerFunctionScoreParser(Class<? extends ScoreFunctionParser> parser) {
|
||||
functionScoreParsers.add(parser);
|
||||
/**
|
||||
* Register a new ScoreFunctionParser.
|
||||
*/
|
||||
public void registerFunctionScoreParser(ScoreFunctionParser<?> parser) {
|
||||
for (String name: parser.getNames()) {
|
||||
Object oldValue = functionScoreParsers.putIfAbsent(name, parser);
|
||||
if (oldValue != null) {
|
||||
throw new IllegalArgumentException("Function score parser [" + oldValue + "] already registered for name [" + name + "]");
|
||||
}
|
||||
}
|
||||
namedWriteableRegistry.registerPrototype(ScoreFunctionBuilder.class, parser.getBuilderPrototype());
|
||||
}
|
||||
|
||||
public void registerQueryParser(Supplier<QueryParser<?>> parser) {
|
||||
queryParsers.add(parser);
|
||||
}
|
||||
|
||||
public void registerFetchSubPhase(Class<? extends FetchSubPhase> subPhase) {
|
||||
@ -212,8 +322,9 @@ public class SearchModule extends AbstractModule {
|
||||
configureAggs();
|
||||
configureHighlighters();
|
||||
configureSuggesters();
|
||||
configureFunctionScore();
|
||||
bind(IndicesQueriesRegistry.class).toInstance(buildQueryParserRegistry());
|
||||
configureFetchSubPhase();
|
||||
configureShapes();
|
||||
}
|
||||
|
||||
protected void configureFetchSubPhase() {
|
||||
@ -231,16 +342,23 @@ public class SearchModule extends AbstractModule {
|
||||
bind(InnerHitsFetchSubPhase.class).asEagerSingleton();
|
||||
}
|
||||
|
||||
protected void configureSuggesters() {
|
||||
suggesters.bind(binder());
|
||||
public IndicesQueriesRegistry buildQueryParserRegistry() {
|
||||
Map<String, QueryParser<?>> queryParsersMap = new HashMap<>();
|
||||
for (Supplier<QueryParser<?>> parserSupplier : queryParsers) {
|
||||
QueryParser<?> parser = parserSupplier.get();
|
||||
for (String name: parser.names()) {
|
||||
Object oldValue = queryParsersMap.putIfAbsent(name, parser);
|
||||
if (oldValue != null) {
|
||||
throw new IllegalArgumentException("Query parser [" + oldValue + "] already registered for name [" + name + "] while trying to register [" + parser + "]");
|
||||
}
|
||||
}
|
||||
namedWriteableRegistry.registerPrototype(QueryBuilder.class, parser.getBuilderPrototype());
|
||||
}
|
||||
return new IndicesQueriesRegistry(settings, queryParsersMap);
|
||||
}
|
||||
|
||||
protected void configureFunctionScore() {
|
||||
Multibinder<ScoreFunctionParser> parserMapBinder = Multibinder.newSetBinder(binder(), ScoreFunctionParser.class);
|
||||
for (Class<? extends ScoreFunctionParser> clazz : functionScoreParsers) {
|
||||
parserMapBinder.addBinding().to(clazz);
|
||||
}
|
||||
bind(ScoreFunctionParserMapper.class).asEagerSingleton();
|
||||
protected void configureSuggesters() {
|
||||
suggesters.bind(binder());
|
||||
}
|
||||
|
||||
protected void configureHighlighters() {
|
||||
@ -332,6 +450,87 @@ public class SearchModule extends AbstractModule {
|
||||
}
|
||||
}
|
||||
|
||||
private void configureShapes() {
|
||||
if (ShapesAvailability.JTS_AVAILABLE && ShapesAvailability.SPATIAL4J_AVAILABLE) {
|
||||
namedWriteableRegistry.registerPrototype(ShapeBuilder.class, PointBuilder.PROTOTYPE);
|
||||
namedWriteableRegistry.registerPrototype(ShapeBuilder.class, CircleBuilder.PROTOTYPE);
|
||||
namedWriteableRegistry.registerPrototype(ShapeBuilder.class, EnvelopeBuilder.PROTOTYPE);
|
||||
namedWriteableRegistry.registerPrototype(ShapeBuilder.class, MultiPointBuilder.PROTOTYPE);
|
||||
namedWriteableRegistry.registerPrototype(ShapeBuilder.class, LineStringBuilder.PROTOTYPE);
|
||||
namedWriteableRegistry.registerPrototype(ShapeBuilder.class, MultiLineStringBuilder.PROTOTYPE);
|
||||
namedWriteableRegistry.registerPrototype(ShapeBuilder.class, PolygonBuilder.PROTOTYPE);
|
||||
namedWriteableRegistry.registerPrototype(ShapeBuilder.class, MultiPolygonBuilder.PROTOTYPE);
|
||||
namedWriteableRegistry.registerPrototype(ShapeBuilder.class, GeometryCollectionBuilder.PROTOTYPE);
|
||||
}
|
||||
}
|
||||
|
||||
private void registerBuiltinFunctionScoreParsers() {
|
||||
registerFunctionScoreParser(new ScriptScoreFunctionParser());
|
||||
registerFunctionScoreParser(new GaussDecayFunctionParser());
|
||||
registerFunctionScoreParser(new LinearDecayFunctionParser());
|
||||
registerFunctionScoreParser(new ExponentialDecayFunctionParser());
|
||||
registerFunctionScoreParser(new RandomScoreFunctionParser());
|
||||
registerFunctionScoreParser(new FieldValueFactorFunctionParser());
|
||||
//weight doesn't have its own parser, so every function supports it out of the box.
|
||||
//Can be a single function too when not associated to any other function, which is why it needs to be registered manually here.
|
||||
namedWriteableRegistry.registerPrototype(ScoreFunctionBuilder.class, new WeightBuilder());
|
||||
}
|
||||
|
||||
private void registerBuiltinQueryParsers() {
|
||||
registerQueryParser(MatchQueryParser::new);
|
||||
registerQueryParser(MultiMatchQueryParser::new);
|
||||
registerQueryParser(NestedQueryParser::new);
|
||||
registerQueryParser(HasChildQueryParser::new);
|
||||
registerQueryParser(HasParentQueryParser::new);
|
||||
registerQueryParser(DisMaxQueryParser::new);
|
||||
registerQueryParser(IdsQueryParser::new);
|
||||
registerQueryParser(MatchAllQueryParser::new);
|
||||
registerQueryParser(QueryStringQueryParser::new);
|
||||
registerQueryParser(BoostingQueryParser::new);
|
||||
BooleanQuery.setMaxClauseCount(settings.getAsInt("index.query.bool.max_clause_count", settings.getAsInt("indices.query.bool.max_clause_count", BooleanQuery.getMaxClauseCount())));
|
||||
registerQueryParser(BoolQueryParser::new);
|
||||
registerQueryParser(TermQueryParser::new);
|
||||
registerQueryParser(TermsQueryParser::new);
|
||||
registerQueryParser(FuzzyQueryParser::new);
|
||||
registerQueryParser(RegexpQueryParser::new);
|
||||
registerQueryParser(RangeQueryParser::new);
|
||||
registerQueryParser(PrefixQueryParser::new);
|
||||
registerQueryParser(WildcardQueryParser::new);
|
||||
registerQueryParser(ConstantScoreQueryParser::new);
|
||||
registerQueryParser(SpanTermQueryParser::new);
|
||||
registerQueryParser(SpanNotQueryParser::new);
|
||||
registerQueryParser(SpanWithinQueryParser::new);
|
||||
registerQueryParser(SpanContainingQueryParser::new);
|
||||
registerQueryParser(FieldMaskingSpanQueryParser::new);
|
||||
registerQueryParser(SpanFirstQueryParser::new);
|
||||
registerQueryParser(SpanNearQueryParser::new);
|
||||
registerQueryParser(SpanOrQueryParser::new);
|
||||
registerQueryParser(MoreLikeThisQueryParser::new);
|
||||
registerQueryParser(WrapperQueryParser::new);
|
||||
registerQueryParser(IndicesQueryParser::new);
|
||||
registerQueryParser(CommonTermsQueryParser::new);
|
||||
registerQueryParser(SpanMultiTermQueryParser::new);
|
||||
// This is delayed until configure time to give plugins a chance to register parsers
|
||||
registerQueryParser(() -> new FunctionScoreQueryParser(new ScoreFunctionParserMapper(functionScoreParsers)));
|
||||
registerQueryParser(SimpleQueryStringParser::new);
|
||||
registerQueryParser(TemplateQueryParser::new);
|
||||
registerQueryParser(TypeQueryParser::new);
|
||||
registerQueryParser(ScriptQueryParser::new);
|
||||
registerQueryParser(GeoDistanceQueryParser::new);
|
||||
registerQueryParser(GeoDistanceRangeQueryParser::new);
|
||||
registerQueryParser(GeoBoundingBoxQueryParser::new);
|
||||
registerQueryParser(GeohashCellQuery.Parser::new);
|
||||
registerQueryParser(GeoPolygonQueryParser::new);
|
||||
registerQueryParser(ExistsQueryParser::new);
|
||||
registerQueryParser(MatchNoneQueryParser::new);
|
||||
if (ShapesAvailability.JTS_AVAILABLE && ShapesAvailability.SPATIAL4J_AVAILABLE) {
|
||||
registerQueryParser(GeoShapeQueryParser::new);
|
||||
}
|
||||
// EmptyQueryBuilder is not registered as query parser but used internally.
|
||||
// We need to register it with the NamedWriteableRegistry in order to serialize it
|
||||
namedWriteableRegistry.registerPrototype(QueryBuilder.class, EmptyQueryBuilder.PROTOTYPE);
|
||||
}
|
||||
|
||||
static {
|
||||
// calcs
|
||||
InternalAvg.registerStreams();
|
||||
@ -393,5 +592,4 @@ public class SearchModule extends AbstractModule {
|
||||
BucketSelectorPipelineAggregator.registerStreams();
|
||||
SerialDiffPipelineAggregator.registerStreams();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -19,10 +19,11 @@
|
||||
|
||||
package org.elasticsearch.action.search;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.elasticsearch.action.support.IndicesOptions;
|
||||
import org.elasticsearch.common.ParseFieldMatcher;
|
||||
import org.elasticsearch.common.bytes.BytesArray;
|
||||
import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
import org.elasticsearch.common.xcontent.ToXContent;
|
||||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||
@ -34,15 +35,14 @@ import org.elasticsearch.script.ScriptService;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.test.StreamsUtils;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
import static java.util.Collections.singletonMap;
|
||||
|
||||
import static org.hamcrest.Matchers.equalTo;
|
||||
import static org.hamcrest.Matchers.nullValue;
|
||||
|
||||
public class MultiSearchRequestTests extends ESTestCase {
|
||||
public void testSimpleAdd() throws Exception {
|
||||
IndicesQueriesRegistry registry = new IndicesQueriesRegistry(Settings.EMPTY, Collections.singleton(new MatchAllQueryParser()), new NamedWriteableRegistry());
|
||||
IndicesQueriesRegistry registry = new IndicesQueriesRegistry(Settings.EMPTY, singletonMap("match_all", new MatchAllQueryParser()));
|
||||
byte[] data = StreamsUtils.copyToBytesFromClasspath("/org/elasticsearch/action/search/simple-msearch1.json");
|
||||
MultiSearchRequest request = RestMultiSearchAction.parseRequest(new MultiSearchRequest(), new BytesArray(data), false, null, null,
|
||||
null, null, IndicesOptions.strictExpandOpenAndForbidClosed(), true, registry, ParseFieldMatcher.EMPTY);
|
||||
@ -69,7 +69,7 @@ public class MultiSearchRequestTests extends ESTestCase {
|
||||
}
|
||||
|
||||
public void testSimpleAdd2() throws Exception {
|
||||
IndicesQueriesRegistry registry = new IndicesQueriesRegistry(Settings.EMPTY, Collections.singleton(new MatchAllQueryParser()), new NamedWriteableRegistry());
|
||||
IndicesQueriesRegistry registry = new IndicesQueriesRegistry(Settings.EMPTY, singletonMap("match_all", new MatchAllQueryParser()));
|
||||
byte[] data = StreamsUtils.copyToBytesFromClasspath("/org/elasticsearch/action/search/simple-msearch2.json");
|
||||
MultiSearchRequest request = RestMultiSearchAction.parseRequest(new MultiSearchRequest(), new BytesArray(data), false, null, null,
|
||||
null, null, IndicesOptions.strictExpandOpenAndForbidClosed(), true, registry, ParseFieldMatcher.EMPTY);
|
||||
@ -88,7 +88,7 @@ public class MultiSearchRequestTests extends ESTestCase {
|
||||
}
|
||||
|
||||
public void testSimpleAdd3() throws Exception {
|
||||
IndicesQueriesRegistry registry = new IndicesQueriesRegistry(Settings.EMPTY, Collections.singleton(new MatchAllQueryParser()), new NamedWriteableRegistry());
|
||||
IndicesQueriesRegistry registry = new IndicesQueriesRegistry(Settings.EMPTY, singletonMap("match_all", new MatchAllQueryParser()));
|
||||
byte[] data = StreamsUtils.copyToBytesFromClasspath("/org/elasticsearch/action/search/simple-msearch3.json");
|
||||
MultiSearchRequest request = RestMultiSearchAction.parseRequest(new MultiSearchRequest(), new BytesArray(data), false, null, null,
|
||||
null, null, IndicesOptions.strictExpandOpenAndForbidClosed(), true, registry, ParseFieldMatcher.EMPTY);
|
||||
@ -108,7 +108,7 @@ public class MultiSearchRequestTests extends ESTestCase {
|
||||
}
|
||||
|
||||
public void testSimpleAdd4() throws Exception {
|
||||
IndicesQueriesRegistry registry = new IndicesQueriesRegistry(Settings.EMPTY, Collections.singleton(new MatchAllQueryParser()), new NamedWriteableRegistry());
|
||||
IndicesQueriesRegistry registry = new IndicesQueriesRegistry(Settings.EMPTY, singletonMap("match_all", new MatchAllQueryParser()));
|
||||
byte[] data = StreamsUtils.copyToBytesFromClasspath("/org/elasticsearch/action/search/simple-msearch4.json");
|
||||
MultiSearchRequest request = RestMultiSearchAction.parseRequest(new MultiSearchRequest(), new BytesArray(data), false, null, null,
|
||||
null, null, IndicesOptions.strictExpandOpenAndForbidClosed(), true, registry, ParseFieldMatcher.EMPTY);
|
||||
@ -130,7 +130,7 @@ public class MultiSearchRequestTests extends ESTestCase {
|
||||
}
|
||||
|
||||
public void testSimpleAdd5() throws Exception {
|
||||
IndicesQueriesRegistry registry = new IndicesQueriesRegistry(Settings.EMPTY, Collections.singleton(new MatchAllQueryParser()), new NamedWriteableRegistry());
|
||||
IndicesQueriesRegistry registry = new IndicesQueriesRegistry(Settings.EMPTY, singletonMap("match_all", new MatchAllQueryParser()));
|
||||
byte[] data = StreamsUtils.copyToBytesFromClasspath("/org/elasticsearch/action/search/simple-msearch5.json");
|
||||
MultiSearchRequest request = RestMultiSearchAction.parseRequest(new MultiSearchRequest(), new BytesArray(data), true, null, null,
|
||||
null, null, IndicesOptions.strictExpandOpenAndForbidClosed(), true, registry, ParseFieldMatcher.EMPTY);
|
||||
|
@ -104,36 +104,36 @@ public class NetworkModuleTests extends ModuleTestCase {
|
||||
|
||||
public void testRegisterTransportService() {
|
||||
Settings settings = Settings.builder().put(NetworkModule.TRANSPORT_SERVICE_TYPE_KEY, "custom").build();
|
||||
NetworkModule module = new NetworkModule(new NetworkService(settings), settings, false);
|
||||
NetworkModule module = new NetworkModule(new NetworkService(settings), settings, false, null);
|
||||
module.registerTransportService("custom", FakeTransportService.class);
|
||||
assertBinding(module, TransportService.class, FakeTransportService.class);
|
||||
|
||||
// check it works with transport only as well
|
||||
module = new NetworkModule(new NetworkService(settings), settings, true);
|
||||
module = new NetworkModule(new NetworkService(settings), settings, true, null);
|
||||
module.registerTransportService("custom", FakeTransportService.class);
|
||||
assertBinding(module, TransportService.class, FakeTransportService.class);
|
||||
}
|
||||
|
||||
public void testRegisterTransport() {
|
||||
Settings settings = Settings.builder().put(NetworkModule.TRANSPORT_TYPE_KEY, "custom").build();
|
||||
NetworkModule module = new NetworkModule(new NetworkService(settings), settings, false);
|
||||
NetworkModule module = new NetworkModule(new NetworkService(settings), settings, false, null);
|
||||
module.registerTransport("custom", FakeTransport.class);
|
||||
assertBinding(module, Transport.class, FakeTransport.class);
|
||||
|
||||
// check it works with transport only as well
|
||||
module = new NetworkModule(new NetworkService(settings), settings, true);
|
||||
module = new NetworkModule(new NetworkService(settings), settings, true, null);
|
||||
module.registerTransport("custom", FakeTransport.class);
|
||||
assertBinding(module, Transport.class, FakeTransport.class);
|
||||
}
|
||||
|
||||
public void testRegisterHttpTransport() {
|
||||
Settings settings = Settings.builder().put(NetworkModule.HTTP_TYPE_KEY, "custom").build();
|
||||
NetworkModule module = new NetworkModule(new NetworkService(settings), settings, false);
|
||||
NetworkModule module = new NetworkModule(new NetworkService(settings), settings, false, null);
|
||||
module.registerHttpTransport("custom", FakeHttpTransport.class);
|
||||
assertBinding(module, HttpServerTransport.class, FakeHttpTransport.class);
|
||||
|
||||
// check registration not allowed for transport only
|
||||
module = new NetworkModule(new NetworkService(settings), settings, true);
|
||||
module = new NetworkModule(new NetworkService(settings), settings, true, null);
|
||||
try {
|
||||
module.registerHttpTransport("custom", FakeHttpTransport.class);
|
||||
fail();
|
||||
@ -144,19 +144,19 @@ public class NetworkModuleTests extends ModuleTestCase {
|
||||
|
||||
// not added if http is disabled
|
||||
settings = Settings.builder().put(NetworkModule.HTTP_ENABLED, false).build();
|
||||
module = new NetworkModule(new NetworkService(settings), settings, false);
|
||||
module = new NetworkModule(new NetworkService(settings), settings, false, null);
|
||||
assertNotBound(module, HttpServerTransport.class);
|
||||
}
|
||||
|
||||
public void testRegisterRestHandler() {
|
||||
Settings settings = Settings.EMPTY;
|
||||
NetworkModule module = new NetworkModule(new NetworkService(settings), settings, false);
|
||||
NetworkModule module = new NetworkModule(new NetworkService(settings), settings, false, null);
|
||||
module.registerRestHandler(FakeRestHandler.class);
|
||||
// also check a builtin is bound
|
||||
assertSetMultiBinding(module, RestHandler.class, FakeRestHandler.class, RestMainAction.class);
|
||||
|
||||
// check registration not allowed for transport only
|
||||
module = new NetworkModule(new NetworkService(settings), settings, true);
|
||||
module = new NetworkModule(new NetworkService(settings), settings, true, null);
|
||||
try {
|
||||
module.registerRestHandler(FakeRestHandler.class);
|
||||
fail();
|
||||
@ -168,7 +168,7 @@ public class NetworkModuleTests extends ModuleTestCase {
|
||||
|
||||
public void testRegisterCatRestHandler() {
|
||||
Settings settings = Settings.EMPTY;
|
||||
NetworkModule module = new NetworkModule(new NetworkService(settings), settings, false);
|
||||
NetworkModule module = new NetworkModule(new NetworkService(settings), settings, false, null);
|
||||
module.registerRestHandler(FakeCatRestHandler.class);
|
||||
// also check a builtin is bound
|
||||
assertSetMultiBinding(module, AbstractCatAction.class, FakeCatRestHandler.class, RestNodesAction.class);
|
||||
|
@ -18,6 +18,15 @@
|
||||
*/
|
||||
package org.elasticsearch.index;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import org.apache.lucene.index.AssertingDirectoryReader;
|
||||
import org.apache.lucene.index.DirectoryReader;
|
||||
import org.apache.lucene.index.FieldInvertState;
|
||||
@ -33,7 +42,6 @@ import org.elasticsearch.Version;
|
||||
import org.elasticsearch.cache.recycler.PageCacheRecycler;
|
||||
import org.elasticsearch.client.Client;
|
||||
import org.elasticsearch.cluster.metadata.IndexMetaData;
|
||||
import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
import org.elasticsearch.common.util.BigArrays;
|
||||
import org.elasticsearch.env.Environment;
|
||||
@ -70,14 +78,7 @@ import org.elasticsearch.test.engine.MockEngineFactory;
|
||||
import org.elasticsearch.threadpool.ThreadPool;
|
||||
import org.elasticsearch.watcher.ResourceWatcherService;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.function.Consumer;
|
||||
import static java.util.Collections.emptyMap;
|
||||
|
||||
public class IndexModuleTests extends ESTestCase {
|
||||
private Index index;
|
||||
@ -108,7 +109,7 @@ public class IndexModuleTests extends ESTestCase {
|
||||
Set<ScriptEngineService> scriptEngines = new HashSet<>();
|
||||
scriptEngines.addAll(Arrays.asList(scriptEngineServices));
|
||||
ScriptService scriptService = new ScriptService(settings, environment, scriptEngines, new ResourceWatcherService(settings, threadPool), new ScriptContextRegistry(Collections.emptyList()));
|
||||
IndicesQueriesRegistry indicesQueriesRegistry = new IndicesQueriesRegistry(settings, Collections.emptySet(), new NamedWriteableRegistry());
|
||||
IndicesQueriesRegistry indicesQueriesRegistry = new IndicesQueriesRegistry(settings, emptyMap());
|
||||
return new NodeServicesProvider(threadPool, indicesQueryCache, null, warmer, bigArrays, client, scriptService, indicesQueriesRegistry, indicesFieldDataCache, circuitBreakerService);
|
||||
}
|
||||
|
||||
|
@ -47,7 +47,6 @@ import org.elasticsearch.common.bytes.BytesArray;
|
||||
import org.elasticsearch.common.bytes.BytesReference;
|
||||
import org.elasticsearch.common.collect.Tuple;
|
||||
import org.elasticsearch.common.compress.CompressedXContent;
|
||||
import org.elasticsearch.common.geo.builders.ShapeBuilderRegistry;
|
||||
import org.elasticsearch.common.inject.AbstractModule;
|
||||
import org.elasticsearch.common.inject.Injector;
|
||||
import org.elasticsearch.common.inject.ModulesBuilder;
|
||||
@ -75,8 +74,6 @@ import org.elasticsearch.index.analysis.AnalysisService;
|
||||
import org.elasticsearch.index.cache.bitset.BitsetFilterCache;
|
||||
import org.elasticsearch.index.fielddata.IndexFieldDataService;
|
||||
import org.elasticsearch.index.mapper.MapperService;
|
||||
import org.elasticsearch.index.query.functionscore.ScoreFunctionParser;
|
||||
import org.elasticsearch.index.query.functionscore.ScoreFunctionParserMapper;
|
||||
import org.elasticsearch.index.query.support.QueryParsers;
|
||||
import org.elasticsearch.index.shard.ShardId;
|
||||
import org.elasticsearch.index.similarity.SimilarityService;
|
||||
@ -94,6 +91,7 @@ import org.elasticsearch.script.ScriptContextRegistry;
|
||||
import org.elasticsearch.script.ScriptEngineService;
|
||||
import org.elasticsearch.script.ScriptModule;
|
||||
import org.elasticsearch.script.ScriptService;
|
||||
import org.elasticsearch.search.SearchModule;
|
||||
import org.elasticsearch.search.internal.SearchContext;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.test.IndexSettingsModule;
|
||||
@ -201,6 +199,7 @@ public abstract class AbstractQueryTestCase<QB extends AbstractQueryBuilder<QB>>
|
||||
Client.class.getClassLoader(),
|
||||
new Class[]{Client.class},
|
||||
clientInvocationHandler);
|
||||
namedWriteableRegistry = new NamedWriteableRegistry();
|
||||
injector = new ModulesBuilder().add(
|
||||
new EnvironmentModule(new Environment(settings)),
|
||||
new SettingsModule(settings, new SettingsFilter(settings)),
|
||||
@ -209,9 +208,7 @@ public abstract class AbstractQueryTestCase<QB extends AbstractQueryBuilder<QB>>
|
||||
@Override
|
||||
public void configure() {
|
||||
// skip services
|
||||
bindQueryParsersExtension();
|
||||
bindMapperExtension();
|
||||
bind(ShapeBuilderRegistry.class).asEagerSingleton();
|
||||
}
|
||||
},
|
||||
new ScriptModule(settings) {
|
||||
@ -235,20 +232,26 @@ public abstract class AbstractQueryTestCase<QB extends AbstractQueryBuilder<QB>>
|
||||
} catch(IOException e) {
|
||||
throw new IllegalStateException("error while binding ScriptService", e);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
},
|
||||
new IndexSettingsModule(index, indexSettings),
|
||||
new SearchModule(settings, namedWriteableRegistry) {
|
||||
@Override
|
||||
protected void configureSearch() {
|
||||
// Skip me
|
||||
}
|
||||
@Override
|
||||
protected void configureSuggesters() {
|
||||
// Skip me
|
||||
}
|
||||
},
|
||||
new AbstractModule() {
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(Client.class).toInstance(proxy);
|
||||
Multibinder.newSetBinder(binder(), ScoreFunctionParser.class);
|
||||
bind(ScoreFunctionParserMapper.class).asEagerSingleton();
|
||||
bind(ClusterService.class).toProvider(Providers.of(clusterService));
|
||||
bind(CircuitBreakerService.class).to(NoneCircuitBreakerService.class);
|
||||
bind(NamedWriteableRegistry.class).asEagerSingleton();
|
||||
bind(NamedWriteableRegistry.class).toInstance(namedWriteableRegistry);
|
||||
}
|
||||
}
|
||||
).createInjector();
|
||||
|
@ -19,6 +19,8 @@
|
||||
|
||||
package org.elasticsearch.index.query.plugin;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.lucene.search.IndexSearcher;
|
||||
import org.apache.lucene.search.MatchAllDocsQuery;
|
||||
import org.apache.lucene.search.Query;
|
||||
@ -31,10 +33,8 @@ import org.elasticsearch.index.query.AbstractQueryBuilder;
|
||||
import org.elasticsearch.index.query.QueryParseContext;
|
||||
import org.elasticsearch.index.query.QueryParser;
|
||||
import org.elasticsearch.index.query.QueryShardContext;
|
||||
import org.elasticsearch.indices.IndicesModule;
|
||||
import org.elasticsearch.plugins.Plugin;
|
||||
|
||||
import java.io.IOException;
|
||||
import org.elasticsearch.search.SearchModule;
|
||||
|
||||
public class DummyQueryParserPlugin extends Plugin {
|
||||
|
||||
@ -48,8 +48,8 @@ public class DummyQueryParserPlugin extends Plugin {
|
||||
return "dummy query";
|
||||
}
|
||||
|
||||
public void onModule(IndicesModule module) {
|
||||
module.registerQueryParser(DummyQueryParser.class);
|
||||
public void onModule(SearchModule module) {
|
||||
module.registerQueryParser(DummyQueryParser::new);
|
||||
}
|
||||
|
||||
public static class DummyQueryBuilder extends AbstractQueryBuilder<DummyQueryBuilder> {
|
||||
|
@ -1,73 +0,0 @@
|
||||
/*
|
||||
* Licensed to Elasticsearch under one or more contributor
|
||||
* license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright
|
||||
* ownership. Elasticsearch licenses this file to you under
|
||||
* the Apache License, Version 2.0 (the "License"); you may
|
||||
* not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.indices;
|
||||
|
||||
import org.elasticsearch.common.inject.ModuleTestCase;
|
||||
import org.elasticsearch.index.query.QueryBuilder;
|
||||
import org.elasticsearch.index.query.QueryParseContext;
|
||||
import org.elasticsearch.index.query.QueryParser;
|
||||
import org.elasticsearch.index.query.TermQueryParser;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class IndicesModuleTests extends ModuleTestCase {
|
||||
|
||||
static class FakeQueryParser implements QueryParser {
|
||||
@Override
|
||||
public String[] names() {
|
||||
return new String[] {"fake-query-parser"};
|
||||
}
|
||||
|
||||
@Override
|
||||
public QueryBuilder fromXContent(QueryParseContext parseContext) throws IOException {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public QueryBuilder getBuilderPrototype() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void testRegisterQueryParser() {
|
||||
IndicesModule module = new IndicesModule();
|
||||
module.registerQueryParser(FakeQueryParser.class);
|
||||
assertSetMultiBinding(module, QueryParser.class, FakeQueryParser.class);
|
||||
}
|
||||
|
||||
public void testRegisterQueryParserDuplicate() {
|
||||
IndicesModule module = new IndicesModule();
|
||||
try {
|
||||
module.registerQueryParser(TermQueryParser.class);
|
||||
} catch (IllegalArgumentException e) {
|
||||
assertEquals(e.getMessage(), "Can't register the same [query_parser] more than once for [" + TermQueryParser.class.getName() + "]");
|
||||
}
|
||||
}
|
||||
|
||||
public void testRegisterHunspellDictionaryDuplicate() {
|
||||
IndicesModule module = new IndicesModule();
|
||||
try {
|
||||
module.registerQueryParser(TermQueryParser.class);
|
||||
} catch (IllegalArgumentException e) {
|
||||
assertEquals(e.getMessage(), "Can't register the same [query_parser] more than once for [" + TermQueryParser.class.getName() + "]");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -25,7 +25,6 @@ import org.elasticsearch.Version;
|
||||
import org.elasticsearch.action.percolate.PercolateShardRequest;
|
||||
import org.elasticsearch.cluster.action.index.MappingUpdatedAction;
|
||||
import org.elasticsearch.cluster.metadata.IndexMetaData;
|
||||
import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||
import org.elasticsearch.index.Index;
|
||||
@ -57,8 +56,9 @@ import org.junit.Before;
|
||||
import org.mockito.Mockito;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Set;
|
||||
import java.util.Map;
|
||||
|
||||
import static java.util.Collections.singletonMap;
|
||||
import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
|
||||
import static org.hamcrest.Matchers.equalTo;
|
||||
import static org.hamcrest.Matchers.is;
|
||||
@ -84,8 +84,8 @@ public class PercolateDocumentParserTests extends ESTestCase {
|
||||
IndicesModule indicesModule = new IndicesModule();
|
||||
mapperService = new MapperService(indexSettings, analysisService, new SimilarityService(indexSettings, Collections.emptyMap()), indicesModule.getMapperRegistry(), () -> null);
|
||||
|
||||
Set<QueryParser> parsers = Collections.singleton(new TermQueryParser());
|
||||
IndicesQueriesRegistry indicesQueriesRegistry = new IndicesQueriesRegistry(indexSettings.getSettings(), parsers, new NamedWriteableRegistry());
|
||||
Map<String, QueryParser<?>> parsers = singletonMap("term", new TermQueryParser());
|
||||
IndicesQueriesRegistry indicesQueriesRegistry = new IndicesQueriesRegistry(indexSettings.getSettings(), parsers);
|
||||
|
||||
queryShardContext = new QueryShardContext(indexSettings, null, null, null, mapperService, null, null, indicesQueriesRegistry);
|
||||
|
||||
|
@ -18,19 +18,29 @@
|
||||
*/
|
||||
package org.elasticsearch.search;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.elasticsearch.common.inject.ModuleTestCase;
|
||||
import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
import org.elasticsearch.index.query.QueryBuilder;
|
||||
import org.elasticsearch.index.query.QueryParseContext;
|
||||
import org.elasticsearch.index.query.QueryParser;
|
||||
import org.elasticsearch.index.query.TermQueryParser;
|
||||
import org.elasticsearch.search.highlight.CustomHighlighter;
|
||||
import org.elasticsearch.search.highlight.Highlighter;
|
||||
import org.elasticsearch.search.highlight.PlainHighlighter;
|
||||
import org.elasticsearch.search.suggest.CustomSuggester;
|
||||
import org.elasticsearch.search.suggest.Suggester;
|
||||
import org.elasticsearch.search.suggest.phrase.PhraseSuggester;
|
||||
|
||||
import static org.hamcrest.Matchers.containsString;
|
||||
/**
|
||||
*/
|
||||
public class SearchModuleTests extends ModuleTestCase {
|
||||
|
||||
public void testDoubleRegister() {
|
||||
SearchModule module = new SearchModule();
|
||||
SearchModule module = new SearchModule(Settings.EMPTY, new NamedWriteableRegistry());
|
||||
try {
|
||||
module.registerHighlighter("fvh", PlainHighlighter.class);
|
||||
} catch (IllegalArgumentException e) {
|
||||
@ -45,7 +55,7 @@ public class SearchModuleTests extends ModuleTestCase {
|
||||
}
|
||||
|
||||
public void testRegisterSuggester() {
|
||||
SearchModule module = new SearchModule();
|
||||
SearchModule module = new SearchModule(Settings.EMPTY, new NamedWriteableRegistry());
|
||||
module.registerSuggester("custom", CustomSuggester.class);
|
||||
try {
|
||||
module.registerSuggester("custom", CustomSuggester.class);
|
||||
@ -56,7 +66,7 @@ public class SearchModuleTests extends ModuleTestCase {
|
||||
}
|
||||
|
||||
public void testRegisterHighlighter() {
|
||||
SearchModule module = new SearchModule();
|
||||
SearchModule module = new SearchModule(Settings.EMPTY, new NamedWriteableRegistry());
|
||||
module.registerHighlighter("custom", CustomHighlighter.class);
|
||||
try {
|
||||
module.registerHighlighter("custom", CustomHighlighter.class);
|
||||
@ -65,4 +75,32 @@ public class SearchModuleTests extends ModuleTestCase {
|
||||
}
|
||||
assertMapMultiBinding(module, Highlighter.class, CustomHighlighter.class);
|
||||
}
|
||||
|
||||
public void testRegisterQueryParserDuplicate() {
|
||||
SearchModule module = new SearchModule(Settings.EMPTY, new NamedWriteableRegistry());
|
||||
module.registerQueryParser(TermQueryParser::new);
|
||||
try {
|
||||
module.buildQueryParserRegistry();
|
||||
} catch (IllegalArgumentException e) {
|
||||
assertThat(e.getMessage(), containsString("already registered for name [term] while trying to register [org.elasticsearch.index."));
|
||||
}
|
||||
}
|
||||
|
||||
static class FakeQueryParser implements QueryParser {
|
||||
@Override
|
||||
public String[] names() {
|
||||
return new String[] {"fake-query-parser"};
|
||||
}
|
||||
|
||||
@Override
|
||||
public QueryBuilder fromXContent(QueryParseContext parseContext) throws IOException {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public QueryBuilder getBuilderPrototype() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -19,6 +19,11 @@
|
||||
|
||||
package org.elasticsearch.search.builder;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.elasticsearch.common.ParseFieldMatcher;
|
||||
import org.elasticsearch.common.bytes.BytesArray;
|
||||
import org.elasticsearch.common.bytes.BytesReference;
|
||||
@ -44,9 +49,9 @@ import org.elasticsearch.index.query.EmptyQueryBuilder;
|
||||
import org.elasticsearch.index.query.QueryBuilders;
|
||||
import org.elasticsearch.index.query.QueryParseContext;
|
||||
import org.elasticsearch.index.query.functionscore.ScoreFunctionParser;
|
||||
import org.elasticsearch.indices.IndicesModule;
|
||||
import org.elasticsearch.indices.query.IndicesQueriesRegistry;
|
||||
import org.elasticsearch.script.Script;
|
||||
import org.elasticsearch.search.SearchModule;
|
||||
import org.elasticsearch.search.aggregations.AggregationBuilders;
|
||||
import org.elasticsearch.search.fetch.innerhits.InnerHitsBuilder;
|
||||
import org.elasticsearch.search.fetch.innerhits.InnerHitsBuilder.InnerHit;
|
||||
@ -63,11 +68,6 @@ import org.elasticsearch.threadpool.ThreadPoolModule;
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.BeforeClass;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import static org.hamcrest.Matchers.equalTo;
|
||||
|
||||
public class SearchSourceBuilderTests extends ESTestCase {
|
||||
@ -83,26 +83,33 @@ public class SearchSourceBuilderTests extends ESTestCase {
|
||||
.put("name", SearchSourceBuilderTests.class.toString())
|
||||
.put("path.home", createTempDir())
|
||||
.build();
|
||||
namedWriteableRegistry = new NamedWriteableRegistry();
|
||||
injector = new ModulesBuilder().add(
|
||||
new SettingsModule(settings, new SettingsFilter(settings)),
|
||||
new ThreadPoolModule(new ThreadPool(settings)),
|
||||
new IndicesModule() {
|
||||
new SearchModule(settings, namedWriteableRegistry) {
|
||||
@Override
|
||||
public void configure() {
|
||||
// skip services
|
||||
bindQueryParsersExtension();
|
||||
protected void configureSearch() {
|
||||
// skip me so we don't need transport
|
||||
}
|
||||
@Override
|
||||
protected void configureAggs() {
|
||||
// skip me so we don't need scripting
|
||||
}
|
||||
@Override
|
||||
protected void configureSuggesters() {
|
||||
// skip me so we don't need IndicesService
|
||||
}
|
||||
},
|
||||
new AbstractModule() {
|
||||
@Override
|
||||
protected void configure() {
|
||||
Multibinder.newSetBinder(binder(), ScoreFunctionParser.class);
|
||||
bind(NamedWriteableRegistry.class).asEagerSingleton();
|
||||
bind(NamedWriteableRegistry.class).toInstance(namedWriteableRegistry);
|
||||
}
|
||||
}
|
||||
).createInjector();
|
||||
indicesQueriesRegistry = injector.getInstance(IndicesQueriesRegistry.class);
|
||||
namedWriteableRegistry = injector.getInstance(NamedWriteableRegistry.class);
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
|
@ -19,6 +19,8 @@
|
||||
|
||||
package org.elasticsearch.search.functionscore;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import org.apache.lucene.search.Explanation;
|
||||
import org.elasticsearch.action.ActionFuture;
|
||||
import org.elasticsearch.action.search.SearchResponse;
|
||||
@ -36,8 +38,6 @@ import org.elasticsearch.test.ESIntegTestCase.ClusterScope;
|
||||
import org.elasticsearch.test.ESIntegTestCase.Scope;
|
||||
import org.elasticsearch.test.hamcrest.ElasticsearchAssertions;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import static org.elasticsearch.client.Requests.indexRequest;
|
||||
import static org.elasticsearch.client.Requests.searchRequest;
|
||||
import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
|
||||
@ -103,7 +103,7 @@ public class FunctionScorePluginIT extends ESIntegTestCase {
|
||||
}
|
||||
|
||||
public void onModule(SearchModule scoreModule) {
|
||||
scoreModule.registerFunctionScoreParser(FunctionScorePluginIT.CustomDistanceScoreParser.class);
|
||||
scoreModule.registerFunctionScoreParser(new FunctionScorePluginIT.CustomDistanceScoreParser());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -19,6 +19,13 @@
|
||||
|
||||
package org.elasticsearch.search.highlight;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.elasticsearch.Version;
|
||||
import org.elasticsearch.cluster.metadata.IndexMetaData;
|
||||
import org.elasticsearch.common.ParseFieldMatcher;
|
||||
@ -42,16 +49,13 @@ import org.elasticsearch.index.mapper.Mapper;
|
||||
import org.elasticsearch.index.mapper.MapperBuilders;
|
||||
import org.elasticsearch.index.mapper.core.StringFieldMapper;
|
||||
import org.elasticsearch.index.query.IdsQueryBuilder;
|
||||
import org.elasticsearch.index.query.IdsQueryParser;
|
||||
import org.elasticsearch.index.query.MatchAllQueryBuilder;
|
||||
import org.elasticsearch.index.query.MatchAllQueryParser;
|
||||
import org.elasticsearch.index.query.QueryBuilder;
|
||||
import org.elasticsearch.index.query.QueryParseContext;
|
||||
import org.elasticsearch.index.query.QueryParser;
|
||||
import org.elasticsearch.index.query.QueryShardContext;
|
||||
import org.elasticsearch.index.query.TermQueryBuilder;
|
||||
import org.elasticsearch.index.query.TermQueryParser;
|
||||
import org.elasticsearch.indices.query.IndicesQueriesRegistry;
|
||||
import org.elasticsearch.search.SearchModule;
|
||||
import org.elasticsearch.search.highlight.HighlightBuilder.Field;
|
||||
import org.elasticsearch.search.highlight.HighlightBuilder.Order;
|
||||
import org.elasticsearch.search.highlight.SearchContextHighlight.FieldOptions;
|
||||
@ -60,15 +64,6 @@ import org.elasticsearch.test.IndexSettingsModule;
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.BeforeClass;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.hamcrest.Matchers.equalTo;
|
||||
import static org.hamcrest.Matchers.not;
|
||||
|
||||
@ -84,12 +79,7 @@ public class HighlightBuilderTests extends ESTestCase {
|
||||
@BeforeClass
|
||||
public static void init() {
|
||||
namedWriteableRegistry = new NamedWriteableRegistry();
|
||||
@SuppressWarnings("rawtypes")
|
||||
Set<QueryParser> injectedQueryParsers = new HashSet<>();
|
||||
injectedQueryParsers.add(new MatchAllQueryParser());
|
||||
injectedQueryParsers.add(new IdsQueryParser());
|
||||
injectedQueryParsers.add(new TermQueryParser());
|
||||
indicesQueriesRegistry = new IndicesQueriesRegistry(Settings.settingsBuilder().build(), injectedQueryParsers, namedWriteableRegistry);
|
||||
indicesQueriesRegistry = new SearchModule(Settings.EMPTY, namedWriteableRegistry).buildQueryParserRegistry();
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
|
@ -18,6 +18,10 @@
|
||||
*/
|
||||
package org.elasticsearch.messy.tests;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Proxy;
|
||||
import java.util.Collections;
|
||||
|
||||
import org.apache.lucene.search.MatchAllDocsQuery;
|
||||
import org.apache.lucene.search.Query;
|
||||
import org.apache.lucene.util.Accountable;
|
||||
@ -31,6 +35,7 @@ import org.elasticsearch.common.inject.Injector;
|
||||
import org.elasticsearch.common.inject.ModulesBuilder;
|
||||
import org.elasticsearch.common.inject.multibindings.Multibinder;
|
||||
import org.elasticsearch.common.inject.util.Providers;
|
||||
import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
import org.elasticsearch.common.settings.SettingsFilter;
|
||||
import org.elasticsearch.common.settings.SettingsModule;
|
||||
@ -60,6 +65,7 @@ import org.elasticsearch.indices.query.IndicesQueriesRegistry;
|
||||
import org.elasticsearch.script.ScriptModule;
|
||||
import org.elasticsearch.script.ScriptService;
|
||||
import org.elasticsearch.script.mustache.MustacheScriptEngineService;
|
||||
import org.elasticsearch.search.SearchModule;
|
||||
import org.elasticsearch.test.ESTestCase;
|
||||
import org.elasticsearch.test.IndexSettingsModule;
|
||||
import org.elasticsearch.threadpool.ThreadPool;
|
||||
@ -67,10 +73,6 @@ import org.elasticsearch.threadpool.ThreadPoolModule;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Proxy;
|
||||
import java.util.Collections;
|
||||
|
||||
import static org.hamcrest.Matchers.containsString;
|
||||
|
||||
/**
|
||||
@ -104,11 +106,14 @@ public class TemplateQueryParserTests extends ESTestCase {
|
||||
new EnvironmentModule(new Environment(settings)),
|
||||
new SettingsModule(settings, new SettingsFilter(settings)),
|
||||
new ThreadPoolModule(new ThreadPool(settings)),
|
||||
new IndicesModule() {
|
||||
new SearchModule(settings, new NamedWriteableRegistry()) {
|
||||
@Override
|
||||
public void configure() {
|
||||
// skip services
|
||||
bindQueryParsersExtension();
|
||||
protected void configureSearch() {
|
||||
// skip so we don't need transport
|
||||
}
|
||||
@Override
|
||||
protected void configureSuggesters() {
|
||||
// skip so we don't need IndicesService
|
||||
}
|
||||
},
|
||||
scriptModule,
|
||||
|
Loading…
x
Reference in New Issue
Block a user