mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-03-24 17:09:48 +00:00
continue abstracting json into xcontent
This commit is contained in:
parent
cdc33e18f3
commit
37dfc443aa
1
.idea/dictionaries/kimchy.xml
generated
1
.idea/dictionaries/kimchy.xml
generated
@ -58,6 +58,7 @@
|
||||
<w>plugins</w>
|
||||
<w>porterstem</w>
|
||||
<w>publishhost</w>
|
||||
<w>queryparser</w>
|
||||
<w>rebalance</w>
|
||||
<w>sbuf</w>
|
||||
<w>searchable</w>
|
||||
|
@ -119,7 +119,7 @@ public class CountRequest extends BroadcastOperationRequest {
|
||||
/**
|
||||
* The query source to execute.
|
||||
*
|
||||
* @see org.elasticsearch.index.query.json.JsonQueryBuilders
|
||||
* @see org.elasticsearch.index.query.xcontent.QueryBuilders
|
||||
*/
|
||||
@Required public CountRequest query(QueryBuilder queryBuilder) {
|
||||
return query(queryBuilder.buildAsBytes());
|
||||
|
@ -98,7 +98,7 @@ public class DeleteByQueryRequest extends IndicesReplicationOperationRequest {
|
||||
/**
|
||||
* The query source to execute.
|
||||
*
|
||||
* @see org.elasticsearch.index.query.json.JsonQueryBuilders
|
||||
* @see org.elasticsearch.index.query.xcontent.QueryBuilders
|
||||
*/
|
||||
@Required public DeleteByQueryRequest query(QueryBuilder queryBuilder) {
|
||||
return query(queryBuilder.buildAsBytes());
|
||||
|
@ -19,6 +19,7 @@
|
||||
|
||||
package org.elasticsearch.action.mlt;
|
||||
|
||||
import org.elasticsearch.index.query.xcontent.BoolQueryBuilder;
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.apache.lucene.document.Fieldable;
|
||||
import org.apache.lucene.index.Term;
|
||||
@ -36,8 +37,7 @@ import org.elasticsearch.action.support.BaseAction;
|
||||
import org.elasticsearch.cluster.ClusterService;
|
||||
import org.elasticsearch.cluster.ClusterState;
|
||||
import org.elasticsearch.index.mapper.*;
|
||||
import org.elasticsearch.index.query.json.BoolJsonQueryBuilder;
|
||||
import org.elasticsearch.index.query.json.MoreLikeThisFieldJsonQueryBuilder;
|
||||
import org.elasticsearch.index.query.xcontent.MoreLikeThisFieldQueryBuilder;
|
||||
import org.elasticsearch.indices.IndicesService;
|
||||
import org.elasticsearch.transport.BaseTransportRequestHandler;
|
||||
import org.elasticsearch.transport.TransportChannel;
|
||||
@ -50,7 +50,7 @@ import java.util.Set;
|
||||
|
||||
import static org.elasticsearch.util.gcommon.collect.Sets.*;
|
||||
import static org.elasticsearch.client.Requests.*;
|
||||
import static org.elasticsearch.index.query.json.JsonQueryBuilders.*;
|
||||
import static org.elasticsearch.index.query.xcontent.QueryBuilders.*;
|
||||
import static org.elasticsearch.search.builder.SearchSourceBuilder.*;
|
||||
|
||||
/**
|
||||
@ -104,7 +104,7 @@ public class TransportMoreLikeThisAction extends BaseAction<MoreLikeThisRequest,
|
||||
listener.onFailure(new ElasticSearchException("document missing"));
|
||||
return;
|
||||
}
|
||||
final BoolJsonQueryBuilder boolBuilder = boolQuery();
|
||||
final BoolQueryBuilder boolBuilder = boolQuery();
|
||||
try {
|
||||
DocumentMapper docMapper = indicesService.indexServiceSafe(request.index()).mapperService().documentMapper(request.type());
|
||||
final Set<String> fields = newHashSet();
|
||||
@ -190,7 +190,7 @@ public class TransportMoreLikeThisAction extends BaseAction<MoreLikeThisRequest,
|
||||
});
|
||||
}
|
||||
|
||||
private void parseSource(GetResponse getResponse, final BoolJsonQueryBuilder boolBuilder, DocumentMapper docMapper, final Set<String> fields, final MoreLikeThisRequest request) {
|
||||
private void parseSource(GetResponse getResponse, final BoolQueryBuilder boolBuilder, DocumentMapper docMapper, final Set<String> fields, final MoreLikeThisRequest request) {
|
||||
if (getResponse.source() == null) {
|
||||
return;
|
||||
}
|
||||
@ -213,12 +213,12 @@ public class TransportMoreLikeThisAction extends BaseAction<MoreLikeThisRequest,
|
||||
});
|
||||
}
|
||||
|
||||
private void addMoreLikeThis(MoreLikeThisRequest request, BoolJsonQueryBuilder boolBuilder, FieldMapper fieldMapper, Fieldable field) {
|
||||
private void addMoreLikeThis(MoreLikeThisRequest request, BoolQueryBuilder boolBuilder, FieldMapper fieldMapper, Fieldable field) {
|
||||
addMoreLikeThis(request, boolBuilder, field.name(), fieldMapper.valueAsString(field));
|
||||
}
|
||||
|
||||
private void addMoreLikeThis(MoreLikeThisRequest request, BoolJsonQueryBuilder boolBuilder, String fieldName, String likeText) {
|
||||
MoreLikeThisFieldJsonQueryBuilder mlt = moreLikeThisFieldQuery(fieldName)
|
||||
private void addMoreLikeThis(MoreLikeThisRequest request, BoolQueryBuilder boolBuilder, String fieldName, String likeText) {
|
||||
MoreLikeThisFieldQueryBuilder mlt = moreLikeThisFieldQuery(fieldName)
|
||||
.likeText(likeText)
|
||||
.percentTermsToMatch(request.percentTermsToMatch())
|
||||
.boostTerms(request.boostTerms())
|
||||
|
@ -83,7 +83,7 @@ public class Requests {
|
||||
|
||||
/**
|
||||
* Creates a delete by query request. Note, the query itself must be set either by setting the JSON source
|
||||
* of the query, or by using a {@link org.elasticsearch.index.query.QueryBuilder} (using {@link org.elasticsearch.index.query.json.JsonQueryBuilders}).
|
||||
* of the query, or by using a {@link org.elasticsearch.index.query.QueryBuilder} (using {@link org.elasticsearch.index.query.xcontent.QueryBuilders}).
|
||||
*
|
||||
* @param indices The indices the delete by query against. Use <tt>null</tt> or <tt>_all</tt> to execute against all indices
|
||||
* @return The delete by query request
|
||||
@ -107,7 +107,7 @@ public class Requests {
|
||||
|
||||
/**
|
||||
* Creates a count request which counts the hits matched against a query. Note, the query itself must be set
|
||||
* either using the JSON source of the query, or using a {@link org.elasticsearch.index.query.QueryBuilder} (using {@link org.elasticsearch.index.query.json.JsonQueryBuilders}).
|
||||
* either using the JSON source of the query, or using a {@link org.elasticsearch.index.query.QueryBuilder} (using {@link org.elasticsearch.index.query.xcontent.QueryBuilders}).
|
||||
*
|
||||
* @param indices The indices the delete by query against. Use <tt>null</tt> or <tt>_all</tt> to execute against all indices
|
||||
* @return The count request
|
||||
|
@ -19,11 +19,11 @@
|
||||
|
||||
package org.elasticsearch.index.query;
|
||||
|
||||
import org.elasticsearch.index.query.xcontent.*;
|
||||
import org.elasticsearch.util.guice.inject.AbstractModule;
|
||||
import org.elasticsearch.util.guice.inject.Scopes;
|
||||
import org.elasticsearch.util.guice.inject.assistedinject.FactoryProvider;
|
||||
import org.elasticsearch.util.guice.inject.multibindings.MapBinder;
|
||||
import org.elasticsearch.index.query.json.*;
|
||||
import org.elasticsearch.util.settings.Settings;
|
||||
|
||||
import java.util.Map;
|
||||
@ -50,40 +50,40 @@ public class IndexQueryParserModule extends AbstractModule {
|
||||
String qName = entry.getKey();
|
||||
Settings qSettings = entry.getValue();
|
||||
qbinder.addBinding(qName).toProvider(FactoryProvider.newFactory(IndexQueryParserFactory.class,
|
||||
qSettings.getAsClass("type", JsonIndexQueryParser.class))).in(Scopes.SINGLETON);
|
||||
qSettings.getAsClass("type", XContentIndexQueryParser.class))).in(Scopes.SINGLETON);
|
||||
}
|
||||
if (!queryParserGroupSettings.containsKey(IndexQueryParserService.Defaults.DEFAULT)) {
|
||||
qbinder.addBinding(IndexQueryParserService.Defaults.DEFAULT).toProvider(FactoryProvider.newFactory(IndexQueryParserFactory.class,
|
||||
JsonIndexQueryParser.class)).in(Scopes.SINGLETON);
|
||||
XContentIndexQueryParser.class)).in(Scopes.SINGLETON);
|
||||
}
|
||||
|
||||
// handle JsonQueryParsers
|
||||
MapBinder<String, JsonQueryParserFactory> jsonQueryBinder
|
||||
= MapBinder.newMapBinder(binder(), String.class, JsonQueryParserFactory.class);
|
||||
Map<String, Settings> jsonQueryParserGroups = settings.getGroups(JsonIndexQueryParser.Defaults.JSON_QUERY_PREFIX);
|
||||
for (Map.Entry<String, Settings> entry : jsonQueryParserGroups.entrySet()) {
|
||||
// handle XContenQueryParsers
|
||||
MapBinder<String, XContentQueryParserFactory> queryBinder
|
||||
= MapBinder.newMapBinder(binder(), String.class, XContentQueryParserFactory.class);
|
||||
Map<String, Settings> xContentQueryParserGroups = settings.getGroups(XContentIndexQueryParser.Defaults.QUERY_PREFIX);
|
||||
for (Map.Entry<String, Settings> entry : xContentQueryParserGroups.entrySet()) {
|
||||
String qName = entry.getKey();
|
||||
Settings qSettings = entry.getValue();
|
||||
Class<? extends JsonQueryParser> type = qSettings.getAsClass("type", null);
|
||||
Class<? extends XContentQueryParser> type = qSettings.getAsClass("type", null);
|
||||
if (type == null) {
|
||||
throw new IllegalArgumentException("Json Query Parser [" + qName + "] must be provided with a type");
|
||||
throw new IllegalArgumentException("Query Parser [" + qName + "] must be provided with a type");
|
||||
}
|
||||
jsonQueryBinder.addBinding(qName).toProvider(FactoryProvider.newFactory(JsonQueryParserFactory.class,
|
||||
queryBinder.addBinding(qName).toProvider(FactoryProvider.newFactory(XContentQueryParserFactory.class,
|
||||
qSettings.getAsClass("type", null))).in(Scopes.SINGLETON);
|
||||
}
|
||||
|
||||
// handle JsonFilterParsers
|
||||
MapBinder<String, JsonFilterParserFactory> jsonFilterBinder
|
||||
= MapBinder.newMapBinder(binder(), String.class, JsonFilterParserFactory.class);
|
||||
Map<String, Settings> jsonFilterParserGroups = settings.getGroups(JsonIndexQueryParser.Defaults.JSON_FILTER_PREFIX);
|
||||
for (Map.Entry<String, Settings> entry : jsonFilterParserGroups.entrySet()) {
|
||||
// handle XContentFilterParsers
|
||||
MapBinder<String, XContentFilterParserFactory> filterBinder
|
||||
= MapBinder.newMapBinder(binder(), String.class, XContentFilterParserFactory.class);
|
||||
Map<String, Settings> xContentFilterParserGroups = settings.getGroups(XContentIndexQueryParser.Defaults.FILTER_PREFIX);
|
||||
for (Map.Entry<String, Settings> entry : xContentFilterParserGroups.entrySet()) {
|
||||
String fName = entry.getKey();
|
||||
Settings fSettings = entry.getValue();
|
||||
Class<? extends JsonFilterParser> type = fSettings.getAsClass("type", null);
|
||||
Class<? extends XContentFilterParser> type = fSettings.getAsClass("type", null);
|
||||
if (type == null) {
|
||||
throw new IllegalArgumentException("Json Filter Parser [" + fName + "] must be provided with a type");
|
||||
throw new IllegalArgumentException("Filter Parser [" + fName + "] must be provided with a type");
|
||||
}
|
||||
jsonFilterBinder.addBinding(fName).toProvider(FactoryProvider.newFactory(JsonFilterParserFactory.class,
|
||||
filterBinder.addBinding(fName).toProvider(FactoryProvider.newFactory(XContentFilterParserFactory.class,
|
||||
fSettings.getAsClass("type", null))).in(Scopes.SINGLETON);
|
||||
}
|
||||
|
||||
|
@ -19,6 +19,7 @@
|
||||
|
||||
package org.elasticsearch.index.query;
|
||||
|
||||
import org.elasticsearch.index.query.xcontent.XContentIndexQueryParser;
|
||||
import org.elasticsearch.util.gcommon.collect.ImmutableMap;
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.elasticsearch.index.AbstractIndexComponent;
|
||||
@ -26,7 +27,6 @@ import org.elasticsearch.index.Index;
|
||||
import org.elasticsearch.index.analysis.AnalysisService;
|
||||
import org.elasticsearch.index.cache.IndexCache;
|
||||
import org.elasticsearch.index.mapper.MapperService;
|
||||
import org.elasticsearch.index.query.json.JsonIndexQueryParser;
|
||||
import org.elasticsearch.index.settings.IndexSettings;
|
||||
import org.elasticsearch.index.similarity.SimilarityService;
|
||||
import org.elasticsearch.util.settings.ImmutableSettings;
|
||||
@ -76,7 +76,7 @@ public class IndexQueryParserService extends AbstractIndexComponent {
|
||||
}
|
||||
}
|
||||
if (!qparsers.containsKey(Defaults.DEFAULT)) {
|
||||
IndexQueryParser defaultQueryParser = new JsonIndexQueryParser(index, indexSettings, mapperService, indexCache, analysisService, similarityService, null, null, Defaults.DEFAULT, null);
|
||||
IndexQueryParser defaultQueryParser = new XContentIndexQueryParser(index, indexSettings, mapperService, indexCache, analysisService, similarityService, null, null, Defaults.DEFAULT, null);
|
||||
qparsers.put(Defaults.DEFAULT, defaultQueryParser);
|
||||
}
|
||||
|
||||
|
@ -19,16 +19,19 @@
|
||||
|
||||
package org.elasticsearch.index.query;
|
||||
|
||||
import org.elasticsearch.util.io.FastCharArrayWriter;
|
||||
import org.elasticsearch.util.io.FastByteArrayOutputStream;
|
||||
import org.elasticsearch.util.xcontent.XContentType;
|
||||
|
||||
/**
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public interface QueryBuilder {
|
||||
|
||||
String buildAsString() throws QueryBuilderException;
|
||||
FastByteArrayOutputStream buildAsUnsafeBytes() throws QueryBuilderException;
|
||||
|
||||
FastCharArrayWriter buildAsUnsafeChars() throws QueryBuilderException;
|
||||
FastByteArrayOutputStream buildAsUnsafeBytes(XContentType contentType) throws QueryBuilderException;
|
||||
|
||||
byte[] buildAsBytes() throws QueryBuilderException;
|
||||
|
||||
byte[] buildAsBytes(XContentType contentType) throws QueryBuilderException;
|
||||
}
|
||||
|
@ -1,201 +0,0 @@
|
||||
/*
|
||||
* Licensed to Elastic Search and Shay Banon under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. Elastic Search 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.index.query.json;
|
||||
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.elasticsearch.util.guice.inject.assistedinject.Assisted;
|
||||
import org.apache.lucene.search.Query;
|
||||
import org.codehaus.jackson.JsonFactory;
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.elasticsearch.ElasticSearchException;
|
||||
import org.elasticsearch.index.AbstractIndexComponent;
|
||||
import org.elasticsearch.index.Index;
|
||||
import org.elasticsearch.index.analysis.AnalysisService;
|
||||
import org.elasticsearch.index.cache.IndexCache;
|
||||
import org.elasticsearch.index.mapper.MapperService;
|
||||
import org.elasticsearch.index.query.IndexQueryParser;
|
||||
import org.elasticsearch.index.query.QueryBuilder;
|
||||
import org.elasticsearch.index.query.QueryParsingException;
|
||||
import org.elasticsearch.index.settings.IndexSettings;
|
||||
import org.elasticsearch.index.similarity.SimilarityService;
|
||||
import org.elasticsearch.util.ThreadLocals;
|
||||
import org.elasticsearch.util.io.FastCharArrayReader;
|
||||
import org.elasticsearch.util.io.FastCharArrayWriter;
|
||||
import org.elasticsearch.util.io.FastStringReader;
|
||||
import org.elasticsearch.util.json.Jackson;
|
||||
import org.elasticsearch.util.settings.Settings;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.elasticsearch.util.gcommon.collect.Lists.*;
|
||||
|
||||
/**
|
||||
* @author kimchy (Shay Banon)
|
||||
*/
|
||||
public class JsonIndexQueryParser extends AbstractIndexComponent implements IndexQueryParser {
|
||||
|
||||
public static final class Defaults {
|
||||
public static final String JSON_QUERY_PREFIX = "index.queryparser.json.query";
|
||||
public static final String JSON_FILTER_PREFIX = "index.queryparser.json.filter";
|
||||
}
|
||||
|
||||
private ThreadLocal<ThreadLocals.CleanableValue<JsonQueryParseContext>> cache = new ThreadLocal<ThreadLocals.CleanableValue<JsonQueryParseContext>>() {
|
||||
@Override protected ThreadLocals.CleanableValue<JsonQueryParseContext> initialValue() {
|
||||
return new ThreadLocals.CleanableValue<JsonQueryParseContext>(new JsonQueryParseContext(index, queryParserRegistry, mapperService, similarityService, indexCache));
|
||||
}
|
||||
};
|
||||
|
||||
private final JsonFactory jsonFactory = Jackson.defaultJsonFactory();
|
||||
|
||||
private final String name;
|
||||
|
||||
private final MapperService mapperService;
|
||||
|
||||
private final SimilarityService similarityService;
|
||||
|
||||
private final IndexCache indexCache;
|
||||
|
||||
private final JsonQueryParserRegistry queryParserRegistry;
|
||||
|
||||
@Inject public JsonIndexQueryParser(Index index,
|
||||
@IndexSettings Settings indexSettings,
|
||||
MapperService mapperService, IndexCache indexCache,
|
||||
AnalysisService analysisService, @Nullable SimilarityService similarityService,
|
||||
@Nullable Map<String, JsonQueryParserFactory> jsonQueryParsers,
|
||||
@Nullable Map<String, JsonFilterParserFactory> jsonFilterParsers,
|
||||
@Assisted String name, @Assisted @Nullable Settings settings) {
|
||||
super(index, indexSettings);
|
||||
this.name = name;
|
||||
this.mapperService = mapperService;
|
||||
this.similarityService = similarityService;
|
||||
this.indexCache = indexCache;
|
||||
|
||||
List<JsonQueryParser> queryParsers = newArrayList();
|
||||
if (jsonQueryParsers != null) {
|
||||
Map<String, Settings> jsonQueryParserGroups = indexSettings.getGroups(JsonIndexQueryParser.Defaults.JSON_QUERY_PREFIX);
|
||||
for (Map.Entry<String, JsonQueryParserFactory> entry : jsonQueryParsers.entrySet()) {
|
||||
String queryParserName = entry.getKey();
|
||||
JsonQueryParserFactory queryParserFactory = entry.getValue();
|
||||
Settings queryParserSettings = jsonQueryParserGroups.get(queryParserName);
|
||||
|
||||
queryParsers.add(queryParserFactory.create(queryParserName, queryParserSettings));
|
||||
}
|
||||
}
|
||||
|
||||
List<JsonFilterParser> filterParsers = newArrayList();
|
||||
if (jsonFilterParsers != null) {
|
||||
Map<String, Settings> jsonFilterParserGroups = indexSettings.getGroups(JsonIndexQueryParser.Defaults.JSON_FILTER_PREFIX);
|
||||
for (Map.Entry<String, JsonFilterParserFactory> entry : jsonFilterParsers.entrySet()) {
|
||||
String filterParserName = entry.getKey();
|
||||
JsonFilterParserFactory filterParserFactory = entry.getValue();
|
||||
Settings filterParserSettings = jsonFilterParserGroups.get(filterParserName);
|
||||
|
||||
filterParsers.add(filterParserFactory.create(filterParserName, filterParserSettings));
|
||||
}
|
||||
}
|
||||
|
||||
this.queryParserRegistry = new JsonQueryParserRegistry(index, indexSettings, analysisService, queryParsers, filterParsers);
|
||||
}
|
||||
|
||||
@Override public String name() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
public JsonQueryParserRegistry queryParserRegistry() {
|
||||
return this.queryParserRegistry;
|
||||
}
|
||||
|
||||
@Override public Query parse(QueryBuilder queryBuilder) throws ElasticSearchException {
|
||||
JsonParser jp = null;
|
||||
try {
|
||||
FastCharArrayWriter unsafeChars = queryBuilder.buildAsUnsafeChars();
|
||||
jp = jsonFactory.createJsonParser(new FastCharArrayReader(unsafeChars.unsafeCharArray(), 0, unsafeChars.size()));
|
||||
return parse(cache.get().get(), jp);
|
||||
} catch (QueryParsingException e) {
|
||||
throw e;
|
||||
} catch (Exception e) {
|
||||
throw new QueryParsingException(index, "Failed to parse", e);
|
||||
} finally {
|
||||
if (jp != null) {
|
||||
try {
|
||||
jp.close();
|
||||
} catch (IOException e) {
|
||||
// ignore
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override public Query parse(byte[] source) throws ElasticSearchException {
|
||||
JsonParser jp = null;
|
||||
try {
|
||||
jp = jsonFactory.createJsonParser(source);
|
||||
return parse(cache.get().get(), jp);
|
||||
} catch (QueryParsingException e) {
|
||||
throw e;
|
||||
} catch (Exception e) {
|
||||
throw new QueryParsingException(index, "Failed to parse", e);
|
||||
} finally {
|
||||
if (jp != null) {
|
||||
try {
|
||||
jp.close();
|
||||
} catch (IOException e) {
|
||||
// ignore
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override public Query parse(String source) throws QueryParsingException {
|
||||
JsonParser jp = null;
|
||||
try {
|
||||
jp = jsonFactory.createJsonParser(new FastStringReader(source));
|
||||
return parse(cache.get().get(), jp);
|
||||
} catch (QueryParsingException e) {
|
||||
throw e;
|
||||
} catch (Exception e) {
|
||||
throw new QueryParsingException(index, "Failed to parse [" + source + "]", e);
|
||||
} finally {
|
||||
if (jp != null) {
|
||||
try {
|
||||
jp.close();
|
||||
} catch (IOException e) {
|
||||
// ignore
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Query parse(JsonParser jsonParser) {
|
||||
try {
|
||||
return parse(cache.get().get(), jsonParser);
|
||||
} catch (IOException e) {
|
||||
throw new QueryParsingException(index, "Failed to parse", e);
|
||||
}
|
||||
}
|
||||
|
||||
private Query parse(JsonQueryParseContext parseContext, JsonParser jsonParser) throws IOException, QueryParsingException {
|
||||
parseContext.reset(jsonParser);
|
||||
return parseContext.parseInnerQuery();
|
||||
}
|
||||
}
|
@ -1,116 +0,0 @@
|
||||
/*
|
||||
* Licensed to Elastic Search and Shay Banon under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. Elastic Search 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.index.query.json;
|
||||
|
||||
import org.elasticsearch.util.gcommon.collect.ImmutableMap;
|
||||
import org.apache.lucene.util.StringHelper;
|
||||
import org.elasticsearch.index.Index;
|
||||
import org.elasticsearch.index.analysis.AnalysisService;
|
||||
import org.elasticsearch.index.settings.IndexSettings;
|
||||
import org.elasticsearch.util.settings.Settings;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.elasticsearch.util.gcommon.collect.Maps.*;
|
||||
|
||||
/**
|
||||
* @author kimchy (Shay Banon)
|
||||
*/
|
||||
public class JsonQueryParserRegistry {
|
||||
|
||||
private final Map<String, JsonQueryParser> queryParsers;
|
||||
|
||||
private final Map<String, JsonFilterParser> filterParsers;
|
||||
|
||||
public JsonQueryParserRegistry(Index index,
|
||||
@IndexSettings Settings indexSettings,
|
||||
AnalysisService analysisService,
|
||||
@Nullable Iterable<JsonQueryParser> queryParsers,
|
||||
@Nullable Iterable<JsonFilterParser> filterParsers) {
|
||||
|
||||
Map<String, JsonQueryParser> queryParsersMap = newHashMap();
|
||||
// add defaults
|
||||
add(queryParsersMap, new DisMaxJsonQueryParser(index, indexSettings));
|
||||
add(queryParsersMap, new MatchAllJsonQueryParser(index, indexSettings));
|
||||
add(queryParsersMap, new QueryStringJsonQueryParser(index, indexSettings, analysisService));
|
||||
add(queryParsersMap, new BoolJsonQueryParser(index, indexSettings));
|
||||
add(queryParsersMap, new TermJsonQueryParser(index, indexSettings));
|
||||
add(queryParsersMap, new FieldJsonQueryParser(index, indexSettings, analysisService));
|
||||
add(queryParsersMap, new RangeJsonQueryParser(index, indexSettings));
|
||||
add(queryParsersMap, new PrefixJsonQueryParser(index, indexSettings));
|
||||
add(queryParsersMap, new WildcardJsonQueryParser(index, indexSettings));
|
||||
add(queryParsersMap, new FilteredJsonQueryParser(index, indexSettings));
|
||||
add(queryParsersMap, new ConstantScoreQueryJsonQueryParser(index, indexSettings));
|
||||
add(queryParsersMap, new SpanTermJsonQueryParser(index, indexSettings));
|
||||
add(queryParsersMap, new SpanNotJsonQueryParser(index, indexSettings));
|
||||
add(queryParsersMap, new SpanFirstJsonQueryParser(index, indexSettings));
|
||||
add(queryParsersMap, new SpanNearJsonQueryParser(index, indexSettings));
|
||||
add(queryParsersMap, new SpanOrJsonQueryParser(index, indexSettings));
|
||||
add(queryParsersMap, new MoreLikeThisJsonQueryParser(index, indexSettings));
|
||||
add(queryParsersMap, new MoreLikeThisFieldJsonQueryParser(index, indexSettings));
|
||||
add(queryParsersMap, new FuzzyLikeThisJsonQueryParser(index, indexSettings));
|
||||
add(queryParsersMap, new FuzzyLikeThisFieldJsonQueryParser(index, indexSettings));
|
||||
|
||||
// now, copy over the ones provided
|
||||
if (queryParsers != null) {
|
||||
for (JsonQueryParser queryParser : queryParsers) {
|
||||
add(queryParsersMap, queryParser);
|
||||
}
|
||||
}
|
||||
this.queryParsers = ImmutableMap.copyOf(queryParsersMap);
|
||||
|
||||
Map<String, JsonFilterParser> filterParsersMap = newHashMap();
|
||||
// add defaults
|
||||
add(filterParsersMap, new TermJsonFilterParser(index, indexSettings));
|
||||
add(filterParsersMap, new TermsJsonFilterParser(index, indexSettings));
|
||||
add(filterParsersMap, new RangeJsonFilterParser(index, indexSettings));
|
||||
add(filterParsersMap, new PrefixJsonFilterParser(index, indexSettings));
|
||||
add(filterParsersMap, new QueryJsonFilterParser(index, indexSettings));
|
||||
add(filterParsersMap, new BoolJsonFilterParser(index, indexSettings));
|
||||
|
||||
if (filterParsers != null) {
|
||||
for (JsonFilterParser filterParser : filterParsers) {
|
||||
add(filterParsersMap, filterParser);
|
||||
}
|
||||
}
|
||||
this.filterParsers = ImmutableMap.copyOf(filterParsersMap);
|
||||
}
|
||||
|
||||
public JsonQueryParser queryParser(String name) {
|
||||
return queryParsers.get(name);
|
||||
}
|
||||
|
||||
public JsonFilterParser filterParser(String name) {
|
||||
return filterParsers.get(name);
|
||||
}
|
||||
|
||||
private void add(Map<String, JsonFilterParser> map, JsonFilterParser filterParser) {
|
||||
for (String name : filterParser.names()) {
|
||||
map.put(StringHelper.intern(name), filterParser);
|
||||
}
|
||||
}
|
||||
|
||||
private void add(Map<String, JsonQueryParser> map, JsonQueryParser jsonQueryParser) {
|
||||
for (String name : jsonQueryParser.names()) {
|
||||
map.put(StringHelper.intern(name), jsonQueryParser);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,149 +0,0 @@
|
||||
/*
|
||||
* Licensed to Elastic Search and Shay Banon under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. Elastic Search 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.index.query.json;
|
||||
|
||||
import org.elasticsearch.util.gcommon.collect.Sets;
|
||||
import org.apache.lucene.search.Query;
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.codehaus.jackson.JsonToken;
|
||||
import org.elasticsearch.index.AbstractIndexComponent;
|
||||
import org.elasticsearch.index.Index;
|
||||
import org.elasticsearch.index.mapper.AllFieldMapper;
|
||||
import org.elasticsearch.index.query.QueryParsingException;
|
||||
import org.elasticsearch.index.settings.IndexSettings;
|
||||
import org.elasticsearch.util.lucene.search.MoreLikeThisQuery;
|
||||
import org.elasticsearch.util.settings.Settings;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.elasticsearch.util.gcommon.collect.Lists.*;
|
||||
|
||||
/**
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class MoreLikeThisJsonQueryParser extends AbstractIndexComponent implements JsonQueryParser {
|
||||
|
||||
public static final String NAME = "mlt";
|
||||
|
||||
public MoreLikeThisJsonQueryParser(Index index, @IndexSettings Settings indexSettings) {
|
||||
super(index, indexSettings);
|
||||
}
|
||||
|
||||
@Override public String[] names() {
|
||||
return new String[]{NAME, "more_like_this", "moreLikeThis"};
|
||||
}
|
||||
|
||||
@Override public Query parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
JsonParser jp = parseContext.jp();
|
||||
|
||||
MoreLikeThisQuery mltQuery = new MoreLikeThisQuery();
|
||||
mltQuery.setMoreLikeFields(new String[]{AllFieldMapper.NAME});
|
||||
mltQuery.setSimilarity(parseContext.searchSimilarity());
|
||||
|
||||
JsonToken token;
|
||||
String currentFieldName = null;
|
||||
while ((token = jp.nextToken()) != JsonToken.END_OBJECT) {
|
||||
if (token == JsonToken.FIELD_NAME) {
|
||||
currentFieldName = jp.getCurrentName();
|
||||
} else if (token == JsonToken.VALUE_STRING) {
|
||||
if ("like_text".equals(currentFieldName) || "likeText".equals(currentFieldName)) {
|
||||
mltQuery.setLikeText(jp.getText());
|
||||
} else if ("min_term_freq".equals(currentFieldName) || "minTermFreq".equals(currentFieldName)) {
|
||||
mltQuery.setMinTermFrequency(Integer.parseInt(jp.getText()));
|
||||
} else if ("max_query_terms".equals(currentFieldName) || "maxQueryTerms".equals(currentFieldName)) {
|
||||
mltQuery.setMaxQueryTerms(Integer.parseInt(jp.getText()));
|
||||
} else if ("min_doc_freq".equals(currentFieldName) || "minDocFreq".equals(currentFieldName)) {
|
||||
mltQuery.setMinDocFreq(Integer.parseInt(jp.getText()));
|
||||
} else if ("max_doc_freq".equals(currentFieldName) || "maxDocFreq".equals(currentFieldName)) {
|
||||
mltQuery.setMaxDocFreq(Integer.parseInt(jp.getText()));
|
||||
} else if ("min_word_len".equals(currentFieldName) || "minWordLen".equals(currentFieldName)) {
|
||||
mltQuery.setMinWordLen(Integer.parseInt(jp.getText()));
|
||||
} else if ("max_word_len".equals(currentFieldName) || "maxWordLen".equals(currentFieldName)) {
|
||||
mltQuery.setMaxWordLen(Integer.parseInt(jp.getText()));
|
||||
} else if ("boost_terms".equals(currentFieldName) || "boostTerms".equals(currentFieldName)) {
|
||||
mltQuery.setBoostTerms(true);
|
||||
mltQuery.setBoostTermsFactor(Float.parseFloat(jp.getText()));
|
||||
} else if ("percent_terms_to_match".equals(currentFieldName) || "percentTermsToMatch".equals(currentFieldName)) {
|
||||
mltQuery.setPercentTermsToMatch(Float.parseFloat(jp.getText()));
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_NUMBER_INT) {
|
||||
if ("min_term_freq".equals(currentFieldName) || "minTermFreq".equals(currentFieldName)) {
|
||||
mltQuery.setMinTermFrequency(jp.getIntValue());
|
||||
} else if ("max_query_terms".equals(currentFieldName) || "maxQueryTerms".equals(currentFieldName)) {
|
||||
mltQuery.setMaxQueryTerms(jp.getIntValue());
|
||||
} else if ("min_doc_freq".equals(currentFieldName) || "minDocFreq".equals(currentFieldName)) {
|
||||
mltQuery.setMinDocFreq(jp.getIntValue());
|
||||
} else if ("max_doc_freq".equals(currentFieldName) || "maxDocFreq".equals(currentFieldName)) {
|
||||
mltQuery.setMaxDocFreq(jp.getIntValue());
|
||||
} else if ("min_word_len".equals(currentFieldName) || "minWordLen".equals(currentFieldName)) {
|
||||
mltQuery.setMinWordLen(jp.getIntValue());
|
||||
} else if ("max_word_len".equals(currentFieldName) || "maxWordLen".equals(currentFieldName)) {
|
||||
mltQuery.setMaxWordLen(jp.getIntValue());
|
||||
} else if ("boost_terms".equals(currentFieldName) || "boostTerms".equals(currentFieldName)) {
|
||||
mltQuery.setBoostTerms(true);
|
||||
mltQuery.setBoostTermsFactor(jp.getIntValue());
|
||||
} else if ("percent_terms_to_match".equals(currentFieldName) || "percentTermsToMatch".equals(currentFieldName)) {
|
||||
mltQuery.setPercentTermsToMatch(jp.getIntValue());
|
||||
} else if ("boost".equals(currentFieldName)) {
|
||||
mltQuery.setBoost(jp.getIntValue());
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_NUMBER_FLOAT) {
|
||||
if ("boost_terms".equals(currentFieldName) || "boostTerms".equals(currentFieldName)) {
|
||||
mltQuery.setBoostTerms(true);
|
||||
mltQuery.setBoostTermsFactor(jp.getFloatValue());
|
||||
} else if ("percent_terms_to_match".equals(currentFieldName) || "percentTermsToMatch".equals(currentFieldName)) {
|
||||
mltQuery.setPercentTermsToMatch(jp.getFloatValue());
|
||||
} else if ("boost".equals(currentFieldName)) {
|
||||
mltQuery.setBoost(jp.getFloatValue());
|
||||
}
|
||||
} else if (token == JsonToken.START_ARRAY) {
|
||||
if ("stop_words".equals(currentFieldName) || "stopWords".equals(currentFieldName)) {
|
||||
Set<String> stopWords = Sets.newHashSet();
|
||||
while ((token = jp.nextToken()) != JsonToken.END_ARRAY) {
|
||||
stopWords.add(jp.getText());
|
||||
}
|
||||
mltQuery.setStopWords(stopWords);
|
||||
} else if ("fields".equals(currentFieldName)) {
|
||||
List<String> fields = newArrayList();
|
||||
while ((token = jp.nextToken()) != JsonToken.END_ARRAY) {
|
||||
fields.add(parseContext.indexName(jp.getText()));
|
||||
}
|
||||
mltQuery.setMoreLikeFields(fields.toArray(new String[fields.size()]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (mltQuery.getLikeText() == null) {
|
||||
throw new QueryParsingException(index, "more_like_this requires 'like_text' to be specified");
|
||||
}
|
||||
if (mltQuery.getMoreLikeFields() == null || mltQuery.getMoreLikeFields().length == 0) {
|
||||
throw new QueryParsingException(index, "more_like_this requires 'fields' to be specified");
|
||||
}
|
||||
|
||||
// move to the next end object, to close the field name
|
||||
token = jp.nextToken();
|
||||
assert token == JsonToken.END_OBJECT;
|
||||
|
||||
mltQuery.setAnalyzer(parseContext.mapperService().searchAnalyzer());
|
||||
return mltQuery;
|
||||
}
|
||||
}
|
@ -17,22 +17,22 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.json.JsonBuilder;
|
||||
import org.elasticsearch.util.xcontent.builder.XContentBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public abstract class BaseJsonFilterBuilder implements JsonFilterBuilder {
|
||||
public abstract class BaseFilterBuilder implements XContentFilterBuilder {
|
||||
|
||||
@Override public void toJson(JsonBuilder builder, Params params) throws IOException {
|
||||
@Override public void toXContent(XContentBuilder builder, Params params) throws IOException {
|
||||
builder.startObject();
|
||||
doJson(builder, params);
|
||||
doXContent(builder, params);
|
||||
builder.endObject();
|
||||
}
|
||||
|
||||
protected abstract void doJson(JsonBuilder builder, Params params) throws IOException;
|
||||
protected abstract void doXContent(XContentBuilder builder, Params params) throws IOException;
|
||||
}
|
@ -17,56 +17,55 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.index.query.QueryBuilderException;
|
||||
import org.elasticsearch.util.io.FastCharArrayWriter;
|
||||
import org.elasticsearch.util.json.BinaryJsonBuilder;
|
||||
import org.elasticsearch.util.json.JsonBuilder;
|
||||
import org.elasticsearch.util.json.StringJsonBuilder;
|
||||
import org.elasticsearch.util.io.FastByteArrayOutputStream;
|
||||
import org.elasticsearch.util.xcontent.XContentFactory;
|
||||
import org.elasticsearch.util.xcontent.XContentType;
|
||||
import org.elasticsearch.util.xcontent.builder.BinaryXContentBuilder;
|
||||
import org.elasticsearch.util.xcontent.builder.XContentBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public abstract class BaseJsonQueryBuilder implements JsonQueryBuilder {
|
||||
public abstract class BaseQueryBuilder implements XContentQueryBuilder {
|
||||
|
||||
@Override public String buildAsString() throws QueryBuilderException {
|
||||
try {
|
||||
StringJsonBuilder builder = JsonBuilder.stringJsonBuilder();
|
||||
toJson(builder, EMPTY_PARAMS);
|
||||
return builder.string();
|
||||
} catch (Exception e) {
|
||||
throw new QueryBuilderException("Failed to build query", e);
|
||||
}
|
||||
@Override public FastByteArrayOutputStream buildAsUnsafeBytes() throws QueryBuilderException {
|
||||
return buildAsUnsafeBytes(XContentType.JSON);
|
||||
}
|
||||
|
||||
@Override public FastCharArrayWriter buildAsUnsafeChars() throws QueryBuilderException {
|
||||
@Override public FastByteArrayOutputStream buildAsUnsafeBytes(XContentType contentType) throws QueryBuilderException {
|
||||
try {
|
||||
StringJsonBuilder builder = JsonBuilder.stringJsonBuilder();
|
||||
toJson(builder, EMPTY_PARAMS);
|
||||
return builder.unsafeChars();
|
||||
BinaryXContentBuilder builder = XContentFactory.contentBinaryBuilder(contentType);
|
||||
toXContent(builder, EMPTY_PARAMS);
|
||||
return builder.unsafeStream();
|
||||
} catch (Exception e) {
|
||||
throw new QueryBuilderException("Failed to build query", e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override public byte[] buildAsBytes() throws QueryBuilderException {
|
||||
return buildAsBytes(XContentType.JSON);
|
||||
}
|
||||
|
||||
@Override public byte[] buildAsBytes(XContentType contentType) throws QueryBuilderException {
|
||||
try {
|
||||
BinaryJsonBuilder builder = JsonBuilder.binaryJsonBuilder();
|
||||
toJson(builder, EMPTY_PARAMS);
|
||||
XContentBuilder builder = XContentFactory.contentBinaryBuilder(contentType);
|
||||
toXContent(builder, EMPTY_PARAMS);
|
||||
return builder.copiedBytes();
|
||||
} catch (Exception e) {
|
||||
throw new QueryBuilderException("Failed to build query", e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override public void toJson(JsonBuilder builder, Params params) throws IOException {
|
||||
@Override public void toXContent(XContentBuilder builder, Params params) throws IOException {
|
||||
builder.startObject();
|
||||
doJson(builder, params);
|
||||
doXContent(builder, params);
|
||||
builder.endObject();
|
||||
}
|
||||
|
||||
protected abstract void doJson(JsonBuilder builder, Params params) throws IOException;
|
||||
protected abstract void doXContent(XContentBuilder builder, Params params) throws IOException;
|
||||
}
|
@ -17,10 +17,10 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.apache.lucene.search.BooleanClause;
|
||||
import org.elasticsearch.util.json.JsonBuilder;
|
||||
import org.elasticsearch.util.xcontent.builder.XContentBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
@ -30,14 +30,14 @@ import java.util.ArrayList;
|
||||
*
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class BoolJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
public class BoolFilterBuilder extends BaseFilterBuilder {
|
||||
|
||||
private ArrayList<Clause> clauses = new ArrayList<Clause>();
|
||||
|
||||
/**
|
||||
* Adds a filter that <b>must</b> appear in the matching documents.
|
||||
*/
|
||||
public BoolJsonFilterBuilder must(JsonFilterBuilder filterBuilder) {
|
||||
public BoolFilterBuilder must(XContentFilterBuilder filterBuilder) {
|
||||
clauses.add(new Clause(filterBuilder, BooleanClause.Occur.MUST));
|
||||
return this;
|
||||
}
|
||||
@ -45,7 +45,7 @@ public class BoolJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
/**
|
||||
* Adds a filter that <b>must not</b> appear in the matching documents.
|
||||
*/
|
||||
public BoolJsonFilterBuilder mustNot(JsonFilterBuilder filterBuilder) {
|
||||
public BoolFilterBuilder mustNot(XContentFilterBuilder filterBuilder) {
|
||||
clauses.add(new Clause(filterBuilder, BooleanClause.Occur.MUST_NOT));
|
||||
return this;
|
||||
}
|
||||
@ -55,33 +55,33 @@ public class BoolJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
* with no <tt>MUST</tt> clauses one or more <code>SHOULD</code> clauses must match a document
|
||||
* for the BooleanQuery to match.
|
||||
*/
|
||||
public BoolJsonFilterBuilder should(JsonFilterBuilder filterBuilder) {
|
||||
public BoolFilterBuilder should(XContentFilterBuilder filterBuilder) {
|
||||
clauses.add(new Clause(filterBuilder, BooleanClause.Occur.SHOULD));
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override protected void doJson(JsonBuilder builder, Params params) throws IOException {
|
||||
@Override protected void doXContent(XContentBuilder builder, Params params) throws IOException {
|
||||
builder.startObject("bool");
|
||||
for (Clause clause : clauses) {
|
||||
if (clause.occur == BooleanClause.Occur.MUST) {
|
||||
builder.field("must");
|
||||
clause.filterBuilder.toJson(builder, params);
|
||||
clause.filterBuilder.toXContent(builder, params);
|
||||
} else if (clause.occur == BooleanClause.Occur.MUST_NOT) {
|
||||
builder.field("must_not");
|
||||
clause.filterBuilder.toJson(builder, params);
|
||||
clause.filterBuilder.toXContent(builder, params);
|
||||
} else if (clause.occur == BooleanClause.Occur.SHOULD) {
|
||||
builder.field("should");
|
||||
clause.filterBuilder.toJson(builder, params);
|
||||
clause.filterBuilder.toXContent(builder, params);
|
||||
}
|
||||
}
|
||||
builder.endObject();
|
||||
}
|
||||
|
||||
private static class Clause {
|
||||
final JsonFilterBuilder filterBuilder;
|
||||
final XContentFilterBuilder filterBuilder;
|
||||
final BooleanClause.Occur occur;
|
||||
|
||||
private Clause(JsonFilterBuilder filterBuilder, BooleanClause.Occur occur) {
|
||||
private Clause(XContentFilterBuilder filterBuilder, BooleanClause.Occur occur) {
|
||||
this.filterBuilder = filterBuilder;
|
||||
this.occur = occur;
|
||||
}
|
@ -17,17 +17,16 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.apache.lucene.search.*;
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.codehaus.jackson.JsonToken;
|
||||
import org.elasticsearch.index.AbstractIndexComponent;
|
||||
import org.elasticsearch.index.Index;
|
||||
import org.elasticsearch.index.query.QueryParsingException;
|
||||
import org.elasticsearch.index.settings.IndexSettings;
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.elasticsearch.util.settings.Settings;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
@ -35,11 +34,11 @@ import java.util.List;
|
||||
import static org.elasticsearch.util.gcommon.collect.Lists.*;
|
||||
|
||||
/**
|
||||
* @author kimchy (Shay Banon)
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class BoolJsonFilterParser extends AbstractIndexComponent implements JsonFilterParser {
|
||||
public class BoolFilterParser extends AbstractIndexComponent implements XContentFilterParser {
|
||||
|
||||
@Inject public BoolJsonFilterParser(Index index, @IndexSettings Settings settings) {
|
||||
@Inject public BoolFilterParser(Index index, @IndexSettings Settings settings) {
|
||||
super(index, settings);
|
||||
}
|
||||
|
||||
@ -47,17 +46,17 @@ public class BoolJsonFilterParser extends AbstractIndexComponent implements Json
|
||||
return new String[]{"bool"};
|
||||
}
|
||||
|
||||
@Override public Filter parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
JsonParser jp = parseContext.jp();
|
||||
@Override public Filter parse(QueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
XContentParser parser = parseContext.parser();
|
||||
|
||||
List<FilterClause> clauses = newArrayList();
|
||||
|
||||
String currentFieldName = null;
|
||||
JsonToken token;
|
||||
while ((token = jp.nextToken()) != JsonToken.END_OBJECT) {
|
||||
if (token == JsonToken.FIELD_NAME) {
|
||||
currentFieldName = jp.getCurrentName();
|
||||
} else if (token == JsonToken.START_OBJECT) {
|
||||
XContentParser.Token token;
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
|
||||
if (token == XContentParser.Token.FIELD_NAME) {
|
||||
currentFieldName = parser.currentName();
|
||||
} else if (token == XContentParser.Token.START_OBJECT) {
|
||||
if ("must".equals(currentFieldName)) {
|
||||
clauses.add(new FilterClause(parseContext.parseInnerFilter(), BooleanClause.Occur.MUST));
|
||||
} else if ("must_not".equals(currentFieldName) || "mustNot".equals(currentFieldName)) {
|
||||
@ -65,17 +64,17 @@ public class BoolJsonFilterParser extends AbstractIndexComponent implements Json
|
||||
} else if ("should".equals(currentFieldName)) {
|
||||
clauses.add(new FilterClause(parseContext.parseInnerFilter(), BooleanClause.Occur.SHOULD));
|
||||
}
|
||||
} else if (token == JsonToken.START_ARRAY) {
|
||||
} else if (token == XContentParser.Token.START_ARRAY) {
|
||||
if ("must".equals(currentFieldName)) {
|
||||
while ((token = jp.nextToken()) != JsonToken.END_ARRAY) {
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
|
||||
clauses.add(new FilterClause(parseContext.parseInnerFilter(), BooleanClause.Occur.MUST));
|
||||
}
|
||||
} else if ("must_not".equals(currentFieldName) || "mustNot".equals(currentFieldName)) {
|
||||
while ((token = jp.nextToken()) != JsonToken.END_ARRAY) {
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
|
||||
clauses.add(new FilterClause(parseContext.parseInnerFilter(), BooleanClause.Occur.MUST_NOT));
|
||||
}
|
||||
} else if ("should".equals(currentFieldName)) {
|
||||
while ((token = jp.nextToken()) != JsonToken.END_ARRAY) {
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
|
||||
clauses.add(new FilterClause(parseContext.parseInnerFilter(), BooleanClause.Occur.SHOULD));
|
||||
}
|
||||
}
|
@ -17,10 +17,10 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.apache.lucene.search.BooleanClause;
|
||||
import org.elasticsearch.util.json.JsonBuilder;
|
||||
import org.elasticsearch.util.xcontent.builder.XContentBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
@ -31,7 +31,7 @@ import java.util.List;
|
||||
*
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class BoolJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
public class BoolQueryBuilder extends BaseQueryBuilder {
|
||||
|
||||
private ArrayList<Clause> clauses = new ArrayList<Clause>();
|
||||
|
||||
@ -44,7 +44,7 @@ public class BoolJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* Adds a query that <b>must</b> appear in the matching documents.
|
||||
*/
|
||||
public BoolJsonQueryBuilder must(JsonQueryBuilder queryBuilder) {
|
||||
public BoolQueryBuilder must(XContentQueryBuilder queryBuilder) {
|
||||
clauses.add(new Clause(queryBuilder, BooleanClause.Occur.MUST));
|
||||
return this;
|
||||
}
|
||||
@ -52,7 +52,7 @@ public class BoolJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* Adds a query that <b>must not</b> appear in the matching documents.
|
||||
*/
|
||||
public BoolJsonQueryBuilder mustNot(JsonQueryBuilder queryBuilder) {
|
||||
public BoolQueryBuilder mustNot(XContentQueryBuilder queryBuilder) {
|
||||
clauses.add(new Clause(queryBuilder, BooleanClause.Occur.MUST_NOT));
|
||||
return this;
|
||||
}
|
||||
@ -64,7 +64,7 @@ public class BoolJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
*
|
||||
* @see #minimumNumberShouldMatch(int)
|
||||
*/
|
||||
public BoolJsonQueryBuilder should(JsonQueryBuilder queryBuilder) {
|
||||
public BoolQueryBuilder should(XContentQueryBuilder queryBuilder) {
|
||||
clauses.add(new Clause(queryBuilder, BooleanClause.Occur.SHOULD));
|
||||
return this;
|
||||
}
|
||||
@ -73,7 +73,7 @@ public class BoolJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* Sets the boost for this query. Documents matching this query will (in addition to the normal
|
||||
* weightings) have their score multiplied by the boost provided.
|
||||
*/
|
||||
public BoolJsonQueryBuilder boost(float boost) {
|
||||
public BoolQueryBuilder boost(float boost) {
|
||||
this.boost = boost;
|
||||
return this;
|
||||
}
|
||||
@ -81,7 +81,7 @@ public class BoolJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* Disables <tt>Similarity#coord(int,int)</tt> in scoring. Defualts to <tt>false</tt>.
|
||||
*/
|
||||
public BoolJsonQueryBuilder disableCoord(boolean disableCoord) {
|
||||
public BoolQueryBuilder disableCoord(boolean disableCoord) {
|
||||
this.disableCoord = disableCoord;
|
||||
return this;
|
||||
}
|
||||
@ -99,7 +99,7 @@ public class BoolJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
*
|
||||
* @param minimumNumberShouldMatch the number of optional clauses that must match
|
||||
*/
|
||||
public BoolJsonQueryBuilder minimumNumberShouldMatch(int minimumNumberShouldMatch) {
|
||||
public BoolQueryBuilder minimumNumberShouldMatch(int minimumNumberShouldMatch) {
|
||||
this.minimumNumberShouldMatch = minimumNumberShouldMatch;
|
||||
return this;
|
||||
}
|
||||
@ -111,18 +111,18 @@ public class BoolJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
return this.clauses;
|
||||
}
|
||||
|
||||
@Override protected void doJson(JsonBuilder builder, Params params) throws IOException {
|
||||
@Override protected void doXContent(XContentBuilder builder, Params params) throws IOException {
|
||||
builder.startObject("bool");
|
||||
for (Clause clause : clauses) {
|
||||
if (clause.occur == BooleanClause.Occur.MUST) {
|
||||
builder.field("must");
|
||||
clause.queryBuilder.toJson(builder, params);
|
||||
clause.queryBuilder.toXContent(builder, params);
|
||||
} else if (clause.occur == BooleanClause.Occur.MUST_NOT) {
|
||||
builder.field("must_not");
|
||||
clause.queryBuilder.toJson(builder, params);
|
||||
clause.queryBuilder.toXContent(builder, params);
|
||||
} else if (clause.occur == BooleanClause.Occur.SHOULD) {
|
||||
builder.field("should");
|
||||
clause.queryBuilder.toJson(builder, params);
|
||||
clause.queryBuilder.toXContent(builder, params);
|
||||
}
|
||||
}
|
||||
if (boost != -1) {
|
||||
@ -138,10 +138,10 @@ public class BoolJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
}
|
||||
|
||||
private static class Clause {
|
||||
final JsonQueryBuilder queryBuilder;
|
||||
final XContentQueryBuilder queryBuilder;
|
||||
final BooleanClause.Occur occur;
|
||||
|
||||
private Clause(JsonQueryBuilder queryBuilder, BooleanClause.Occur occur) {
|
||||
private Clause(XContentQueryBuilder queryBuilder, BooleanClause.Occur occur) {
|
||||
this.queryBuilder = queryBuilder;
|
||||
this.occur = occur;
|
||||
}
|
@ -17,20 +17,18 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.apache.lucene.search.BooleanClause;
|
||||
import org.apache.lucene.search.BooleanQuery;
|
||||
import org.apache.lucene.search.Query;
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.codehaus.jackson.JsonToken;
|
||||
import org.elasticsearch.index.AbstractIndexComponent;
|
||||
import org.elasticsearch.index.Index;
|
||||
import org.elasticsearch.index.query.QueryParsingException;
|
||||
import org.elasticsearch.index.settings.IndexSettings;
|
||||
import org.elasticsearch.util.Booleans;
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.elasticsearch.util.settings.Settings;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
@ -41,9 +39,9 @@ import static org.elasticsearch.util.lucene.search.Queries.*;
|
||||
/**
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class BoolJsonQueryParser extends AbstractIndexComponent implements JsonQueryParser {
|
||||
public class BoolQueryParser extends AbstractIndexComponent implements XContentQueryParser {
|
||||
|
||||
@Inject public BoolJsonQueryParser(Index index, @IndexSettings Settings settings) {
|
||||
@Inject public BoolQueryParser(Index index, @IndexSettings Settings settings) {
|
||||
super(index, settings);
|
||||
}
|
||||
|
||||
@ -51,8 +49,8 @@ public class BoolJsonQueryParser extends AbstractIndexComponent implements JsonQ
|
||||
return new String[]{"bool"};
|
||||
}
|
||||
|
||||
@Override public Query parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
JsonParser jp = parseContext.jp();
|
||||
@Override public Query parse(QueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
XContentParser parser = parseContext.parser();
|
||||
|
||||
boolean disableCoord = false;
|
||||
float boost = 1.0f;
|
||||
@ -61,11 +59,11 @@ public class BoolJsonQueryParser extends AbstractIndexComponent implements JsonQ
|
||||
List<BooleanClause> clauses = newArrayList();
|
||||
|
||||
String currentFieldName = null;
|
||||
JsonToken token;
|
||||
while ((token = jp.nextToken()) != JsonToken.END_OBJECT) {
|
||||
if (token == JsonToken.FIELD_NAME) {
|
||||
currentFieldName = jp.getCurrentName();
|
||||
} else if (token == JsonToken.START_OBJECT) {
|
||||
XContentParser.Token token;
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
|
||||
if (token == XContentParser.Token.FIELD_NAME) {
|
||||
currentFieldName = parser.currentName();
|
||||
} else if (token == XContentParser.Token.START_OBJECT) {
|
||||
if ("must".equals(currentFieldName)) {
|
||||
clauses.add(new BooleanClause(parseContext.parseInnerQuery(), BooleanClause.Occur.MUST));
|
||||
} else if ("must_not".equals(currentFieldName) || "mustNot".equals(currentFieldName)) {
|
||||
@ -73,43 +71,27 @@ public class BoolJsonQueryParser extends AbstractIndexComponent implements JsonQ
|
||||
} else if ("should".equals(currentFieldName)) {
|
||||
clauses.add(new BooleanClause(parseContext.parseInnerQuery(), BooleanClause.Occur.SHOULD));
|
||||
}
|
||||
} else if (token == JsonToken.START_ARRAY) {
|
||||
} else if (token == XContentParser.Token.START_ARRAY) {
|
||||
if ("must".equals(currentFieldName)) {
|
||||
while ((token = jp.nextToken()) != JsonToken.END_ARRAY) {
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
|
||||
clauses.add(new BooleanClause(parseContext.parseInnerQuery(), BooleanClause.Occur.MUST));
|
||||
}
|
||||
} else if ("must_not".equals(currentFieldName) || "mustNot".equals(currentFieldName)) {
|
||||
while ((token = jp.nextToken()) != JsonToken.END_ARRAY) {
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
|
||||
clauses.add(new BooleanClause(parseContext.parseInnerQuery(), BooleanClause.Occur.MUST_NOT));
|
||||
}
|
||||
} else if ("should".equals(currentFieldName)) {
|
||||
while ((token = jp.nextToken()) != JsonToken.END_ARRAY) {
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
|
||||
clauses.add(new BooleanClause(parseContext.parseInnerQuery(), BooleanClause.Occur.SHOULD));
|
||||
}
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_TRUE || token == JsonToken.VALUE_FALSE) {
|
||||
} else if (token.isValue()) {
|
||||
if ("disable_coord".equals(currentFieldName) || "disableCoord".equals(currentFieldName)) {
|
||||
disableCoord = token == JsonToken.VALUE_TRUE;
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_NUMBER_INT) {
|
||||
if ("disable_coord".equals(currentFieldName) || "disableCoord".equals(currentFieldName)) {
|
||||
disableCoord = jp.getIntValue() != 0;
|
||||
disableCoord = parser.booleanValue();
|
||||
} else if ("minimum_number_should_match".equals(currentFieldName) || "minimumNumberShouldMatch".equals(currentFieldName)) {
|
||||
minimumNumberShouldMatch = jp.getIntValue();
|
||||
minimumNumberShouldMatch = parser.intValue();
|
||||
} else if ("boost".equals(currentFieldName)) {
|
||||
boost = jp.getIntValue();
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_NUMBER_FLOAT) {
|
||||
if ("boost".equals(currentFieldName)) {
|
||||
boost = jp.getFloatValue();
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_STRING) {
|
||||
if ("disable_coord".equals(currentFieldName) || "disableCoord".equals(currentFieldName)) {
|
||||
disableCoord = Booleans.parseBoolean(jp.getText(), false);
|
||||
} else if ("minimum_number_should_match".equals(currentFieldName) || "minimumNumberShouldMatch".equals(currentFieldName)) {
|
||||
minimumNumberShouldMatch = Integer.parseInt(jp.getText());
|
||||
} else if ("boost".equals(currentFieldName)) {
|
||||
boost = Float.parseFloat(jp.getText());
|
||||
boost = parser.floatValue();
|
||||
}
|
||||
}
|
||||
}
|
@ -17,9 +17,9 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.json.JsonBuilder;
|
||||
import org.elasticsearch.util.xcontent.builder.XContentBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@ -29,9 +29,9 @@ import java.io.IOException;
|
||||
*
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class ConstantScoreQueryJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
public class ConstantScoreQueryBuilder extends BaseQueryBuilder {
|
||||
|
||||
private final JsonFilterBuilder filterBuilder;
|
||||
private final XContentFilterBuilder filterBuilder;
|
||||
|
||||
private float boost = -1;
|
||||
|
||||
@ -41,7 +41,7 @@ public class ConstantScoreQueryJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
*
|
||||
* @param filterBuilder The filter to wrap in a constant score query
|
||||
*/
|
||||
public ConstantScoreQueryJsonQueryBuilder(JsonFilterBuilder filterBuilder) {
|
||||
public ConstantScoreQueryBuilder(XContentFilterBuilder filterBuilder) {
|
||||
this.filterBuilder = filterBuilder;
|
||||
}
|
||||
|
||||
@ -49,15 +49,15 @@ public class ConstantScoreQueryJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* Sets the boost for this query. Documents matching this query will (in addition to the normal
|
||||
* weightings) have their score multiplied by the boost provided.
|
||||
*/
|
||||
public ConstantScoreQueryJsonQueryBuilder boost(float boost) {
|
||||
public ConstantScoreQueryBuilder boost(float boost) {
|
||||
this.boost = boost;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override protected void doJson(JsonBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(ConstantScoreQueryJsonQueryParser.NAME);
|
||||
@Override protected void doXContent(XContentBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(ConstantScoreQueryParser.NAME);
|
||||
builder.field("filter");
|
||||
filterBuilder.toJson(builder, params);
|
||||
filterBuilder.toXContent(builder, params);
|
||||
if (boost != -1) {
|
||||
builder.field("boost", boost);
|
||||
}
|
@ -17,64 +17,60 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.apache.lucene.search.ConstantScoreQuery;
|
||||
import org.apache.lucene.search.Filter;
|
||||
import org.apache.lucene.search.Query;
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.codehaus.jackson.JsonToken;
|
||||
import org.elasticsearch.index.AbstractIndexComponent;
|
||||
import org.elasticsearch.index.Index;
|
||||
import org.elasticsearch.index.query.QueryParsingException;
|
||||
import org.elasticsearch.index.settings.IndexSettings;
|
||||
import org.elasticsearch.util.Strings;
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.elasticsearch.util.settings.Settings;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class ConstantScoreQueryJsonQueryParser extends AbstractIndexComponent implements JsonQueryParser {
|
||||
public class ConstantScoreQueryParser extends AbstractIndexComponent implements XContentQueryParser {
|
||||
|
||||
public static final String NAME = "constant_score";
|
||||
|
||||
@Inject public ConstantScoreQueryJsonQueryParser(Index index, @IndexSettings Settings settings) {
|
||||
@Inject public ConstantScoreQueryParser(Index index, @IndexSettings Settings settings) {
|
||||
super(index, settings);
|
||||
}
|
||||
|
||||
@Override public String[] names() {
|
||||
return new String[]{NAME};
|
||||
return new String[]{NAME, Strings.toCamelCase(NAME)};
|
||||
}
|
||||
|
||||
@Override public Query parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
JsonParser jp = parseContext.jp();
|
||||
@Override public Query parse(QueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
XContentParser parser = parseContext.parser();
|
||||
|
||||
Filter filter = null;
|
||||
float boost = 1.0f;
|
||||
|
||||
String currentFieldName = null;
|
||||
JsonToken token;
|
||||
while ((token = jp.nextToken()) != JsonToken.END_OBJECT) {
|
||||
if (token == JsonToken.FIELD_NAME) {
|
||||
currentFieldName = jp.getCurrentName();
|
||||
} else if (token == JsonToken.START_OBJECT) {
|
||||
XContentParser.Token token;
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
|
||||
if (token == XContentParser.Token.FIELD_NAME) {
|
||||
currentFieldName = parser.currentName();
|
||||
} else if (token == XContentParser.Token.START_OBJECT) {
|
||||
if ("filter".equals(currentFieldName)) {
|
||||
filter = parseContext.parseInnerFilter();
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_NUMBER_INT || token == JsonToken.VALUE_NUMBER_FLOAT) {
|
||||
} else if (token.isValue()) {
|
||||
if ("boost".equals(currentFieldName)) {
|
||||
boost = jp.getFloatValue();
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_STRING) {
|
||||
if ("boost".equals(currentFieldName)) {
|
||||
boost = Float.parseFloat(jp.getText());
|
||||
boost = parser.floatValue();
|
||||
}
|
||||
}
|
||||
}
|
||||
if (filter == null) {
|
||||
throw new QueryParsingException(index, "[constantScore] requires 'filter' element");
|
||||
throw new QueryParsingException(index, "[constant_score] requires 'filter' element");
|
||||
}
|
||||
// we don't cache the filter, we assume it is already cached in the filter parsers...
|
||||
ConstantScoreQuery query = new ConstantScoreQuery(filter);
|
@ -17,9 +17,9 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.json.JsonBuilder;
|
||||
import org.elasticsearch.util.xcontent.builder.XContentBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
@ -33,9 +33,9 @@ import static org.elasticsearch.util.gcommon.collect.Lists.*;
|
||||
*
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class DisMaxJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
public class DisMaxQueryBuilder extends BaseQueryBuilder {
|
||||
|
||||
private ArrayList<JsonQueryBuilder> queries = newArrayList();
|
||||
private ArrayList<XContentQueryBuilder> queries = newArrayList();
|
||||
|
||||
private float boost = -1;
|
||||
|
||||
@ -44,7 +44,7 @@ public class DisMaxJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* Add a sub-query to this disjunction.
|
||||
*/
|
||||
public DisMaxJsonQueryBuilder add(JsonQueryBuilder queryBuilder) {
|
||||
public DisMaxQueryBuilder add(XContentQueryBuilder queryBuilder) {
|
||||
queries.add(queryBuilder);
|
||||
return this;
|
||||
}
|
||||
@ -53,7 +53,7 @@ public class DisMaxJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* Sets the boost for this query. Documents matching this query will (in addition to the normal
|
||||
* weightings) have their score multiplied by the boost provided.
|
||||
*/
|
||||
public DisMaxJsonQueryBuilder boost(float boost) {
|
||||
public DisMaxQueryBuilder boost(float boost) {
|
||||
this.boost = boost;
|
||||
return this;
|
||||
}
|
||||
@ -64,13 +64,13 @@ public class DisMaxJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* 10 occurrences of word in a lower-scored field that is also in a higher scored field is just as good as a unique
|
||||
* word in the lower scored field (i.e., one that is not in any higher scored field.
|
||||
*/
|
||||
public DisMaxJsonQueryBuilder tieBreaker(float tieBreaker) {
|
||||
public DisMaxQueryBuilder tieBreaker(float tieBreaker) {
|
||||
this.tieBreaker = tieBreaker;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override protected void doJson(JsonBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(DisMaxJsonQueryParser.NAME);
|
||||
@Override protected void doXContent(XContentBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(DisMaxQueryParser.NAME);
|
||||
if (tieBreaker != -1) {
|
||||
builder.field("tie_breaker", tieBreaker);
|
||||
}
|
||||
@ -78,8 +78,8 @@ public class DisMaxJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
builder.field("boost", boost);
|
||||
}
|
||||
builder.startArray("queries");
|
||||
for (JsonQueryBuilder queryBuilder : queries) {
|
||||
queryBuilder.toJson(builder, params);
|
||||
for (XContentQueryBuilder queryBuilder : queries) {
|
||||
queryBuilder.toXContent(builder, params);
|
||||
}
|
||||
builder.endArray();
|
||||
builder.endObject();
|
@ -17,19 +17,18 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.apache.lucene.search.DisjunctionMaxQuery;
|
||||
import org.apache.lucene.search.Query;
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.codehaus.jackson.JsonToken;
|
||||
import org.elasticsearch.index.AbstractIndexComponent;
|
||||
import org.elasticsearch.index.Index;
|
||||
import org.elasticsearch.index.query.QueryParsingException;
|
||||
import org.elasticsearch.index.settings.IndexSettings;
|
||||
import org.elasticsearch.util.Strings;
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.elasticsearch.util.settings.Settings;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
@ -39,11 +38,11 @@ import static org.elasticsearch.util.gcommon.collect.Lists.*;
|
||||
/**
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class DisMaxJsonQueryParser extends AbstractIndexComponent implements JsonQueryParser {
|
||||
public class DisMaxQueryParser extends AbstractIndexComponent implements XContentQueryParser {
|
||||
|
||||
public static final String NAME = "dis_max";
|
||||
|
||||
@Inject public DisMaxJsonQueryParser(Index index, @IndexSettings Settings settings) {
|
||||
@Inject public DisMaxQueryParser(Index index, @IndexSettings Settings settings) {
|
||||
super(index, settings);
|
||||
}
|
||||
|
||||
@ -51,8 +50,8 @@ public class DisMaxJsonQueryParser extends AbstractIndexComponent implements Jso
|
||||
return new String[]{NAME, Strings.toCamelCase(NAME)};
|
||||
}
|
||||
|
||||
@Override public Query parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
JsonParser jp = parseContext.jp();
|
||||
@Override public Query parse(QueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
XContentParser parser = parseContext.parser();
|
||||
|
||||
float boost = 1.0f;
|
||||
float tieBreaker = 0.0f;
|
||||
@ -60,34 +59,26 @@ public class DisMaxJsonQueryParser extends AbstractIndexComponent implements Jso
|
||||
List<Query> queries = newArrayList();
|
||||
|
||||
String currentFieldName = null;
|
||||
JsonToken token;
|
||||
while ((token = jp.nextToken()) != JsonToken.END_OBJECT) {
|
||||
if (token == JsonToken.FIELD_NAME) {
|
||||
currentFieldName = jp.getCurrentName();
|
||||
} else if (token == JsonToken.START_OBJECT) {
|
||||
XContentParser.Token token;
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
|
||||
if (token == XContentParser.Token.FIELD_NAME) {
|
||||
currentFieldName = parser.currentName();
|
||||
} else if (token == XContentParser.Token.START_OBJECT) {
|
||||
if ("queries".equals(currentFieldName)) {
|
||||
queries.add(parseContext.parseInnerQuery());
|
||||
}
|
||||
} else if (token == JsonToken.START_ARRAY) {
|
||||
} else if (token == XContentParser.Token.START_ARRAY) {
|
||||
if ("queries".equals(currentFieldName)) {
|
||||
while (token != JsonToken.END_ARRAY) {
|
||||
while (token != XContentParser.Token.END_ARRAY) {
|
||||
queries.add(parseContext.parseInnerQuery());
|
||||
token = jp.nextToken();
|
||||
token = parser.nextToken();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if ("boost".equals(currentFieldName)) {
|
||||
if (token == JsonToken.VALUE_STRING) {
|
||||
boost = Float.parseFloat(jp.getText());
|
||||
} else {
|
||||
boost = jp.getFloatValue();
|
||||
}
|
||||
boost = parser.floatValue();
|
||||
} else if ("tie_breaker".equals(currentFieldName) || "tieBreaker".equals(currentFieldName)) {
|
||||
if (token == JsonToken.VALUE_STRING) {
|
||||
tieBreaker = Float.parseFloat(jp.getText());
|
||||
} else {
|
||||
tieBreaker = jp.getFloatValue();
|
||||
}
|
||||
tieBreaker = parser.floatValue();
|
||||
}
|
||||
}
|
||||
}
|
@ -17,20 +17,20 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.json.JsonBuilder;
|
||||
import org.elasticsearch.util.xcontent.builder.XContentBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* A query that executes the query string against a field. It is a simplified
|
||||
* version of {@link QueryStringJsonQueryBuilder} that simply runs against
|
||||
* version of {@link QueryStringQueryBuilder} that simply runs against
|
||||
* a single field.
|
||||
*
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class FieldJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
public class FieldQueryBuilder extends BaseQueryBuilder {
|
||||
|
||||
public static enum Operator {
|
||||
OR,
|
||||
@ -63,73 +63,73 @@ public class FieldJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
|
||||
/**
|
||||
* A query that executes the query string against a field. It is a simplified
|
||||
* version of {@link QueryStringJsonQueryBuilder} that simply runs against
|
||||
* version of {@link QueryStringQueryBuilder} that simply runs against
|
||||
* a single field.
|
||||
*
|
||||
* @param name The name of the field
|
||||
* @param query The query string
|
||||
*/
|
||||
public FieldJsonQueryBuilder(String name, String query) {
|
||||
public FieldQueryBuilder(String name, String query) {
|
||||
this(name, (Object) query);
|
||||
}
|
||||
|
||||
/**
|
||||
* A query that executes the query string against a field. It is a simplified
|
||||
* version of {@link QueryStringJsonQueryBuilder} that simply runs against
|
||||
* version of {@link QueryStringQueryBuilder} that simply runs against
|
||||
* a single field.
|
||||
*
|
||||
* @param name The name of the field
|
||||
* @param query The query string
|
||||
*/
|
||||
public FieldJsonQueryBuilder(String name, int query) {
|
||||
public FieldQueryBuilder(String name, int query) {
|
||||
this(name, (Object) query);
|
||||
}
|
||||
|
||||
/**
|
||||
* A query that executes the query string against a field. It is a simplified
|
||||
* version of {@link QueryStringJsonQueryBuilder} that simply runs against
|
||||
* version of {@link QueryStringQueryBuilder} that simply runs against
|
||||
* a single field.
|
||||
*
|
||||
* @param name The name of the field
|
||||
* @param query The query string
|
||||
*/
|
||||
public FieldJsonQueryBuilder(String name, long query) {
|
||||
public FieldQueryBuilder(String name, long query) {
|
||||
this(name, (Object) query);
|
||||
}
|
||||
|
||||
/**
|
||||
* A query that executes the query string against a field. It is a simplified
|
||||
* version of {@link QueryStringJsonQueryBuilder} that simply runs against
|
||||
* version of {@link QueryStringQueryBuilder} that simply runs against
|
||||
* a single field.
|
||||
*
|
||||
* @param name The name of the field
|
||||
* @param query The query string
|
||||
*/
|
||||
public FieldJsonQueryBuilder(String name, float query) {
|
||||
public FieldQueryBuilder(String name, float query) {
|
||||
this(name, (Object) query);
|
||||
}
|
||||
|
||||
/**
|
||||
* A query that executes the query string against a field. It is a simplified
|
||||
* version of {@link QueryStringJsonQueryBuilder} that simply runs against
|
||||
* version of {@link QueryStringQueryBuilder} that simply runs against
|
||||
* a single field.
|
||||
*
|
||||
* @param name The name of the field
|
||||
* @param query The query string
|
||||
*/
|
||||
public FieldJsonQueryBuilder(String name, double query) {
|
||||
public FieldQueryBuilder(String name, double query) {
|
||||
this(name, (Object) query);
|
||||
}
|
||||
|
||||
/**
|
||||
* A query that executes the query string against a field. It is a simplified
|
||||
* version of {@link QueryStringJsonQueryBuilder} that simply runs against
|
||||
* version of {@link QueryStringQueryBuilder} that simply runs against
|
||||
* a single field.
|
||||
*
|
||||
* @param name The name of the field
|
||||
* @param query The query string
|
||||
*/
|
||||
private FieldJsonQueryBuilder(String name, Object query) {
|
||||
private FieldQueryBuilder(String name, Object query) {
|
||||
this.name = name;
|
||||
this.query = query;
|
||||
}
|
||||
@ -138,7 +138,7 @@ public class FieldJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* Sets the boost for this query. Documents matching this query will (in addition to the normal
|
||||
* weightings) have their score multiplied by the boost provided.
|
||||
*/
|
||||
public FieldJsonQueryBuilder boost(float boost) {
|
||||
public FieldQueryBuilder boost(float boost) {
|
||||
this.boost = boost;
|
||||
extraSet = true;
|
||||
return this;
|
||||
@ -147,14 +147,14 @@ public class FieldJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* Sets the boolean operator of the query parser used to parse the query string.
|
||||
*
|
||||
* <p>In default mode ({@link FieldJsonQueryBuilder.Operator#OR}) terms without any modifiers
|
||||
* <p>In default mode ({@link FieldQueryBuilder.Operator#OR}) terms without any modifiers
|
||||
* are considered optional: for example <code>capital of Hungary</code> is equal to
|
||||
* <code>capital OR of OR Hungary</code>.
|
||||
*
|
||||
* <p>In {@link FieldJsonQueryBuilder.Operator#AND} mode terms are considered to be in conjunction: the
|
||||
* <p>In {@link FieldQueryBuilder.Operator#AND} mode terms are considered to be in conjunction: the
|
||||
* above mentioned query is parsed as <code>capital AND of AND Hungary</code>
|
||||
*/
|
||||
public FieldJsonQueryBuilder defaultOperator(Operator defaultOperator) {
|
||||
public FieldQueryBuilder defaultOperator(Operator defaultOperator) {
|
||||
this.defaultOperator = defaultOperator;
|
||||
extraSet = true;
|
||||
return this;
|
||||
@ -164,7 +164,7 @@ public class FieldJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* The optional analyzer used to analyze the query string. Note, if a field has search analyzer
|
||||
* defined for it, then it will be used automatically. Defaults to the smart search analyzer.
|
||||
*/
|
||||
public FieldJsonQueryBuilder analyzer(String analyzer) {
|
||||
public FieldQueryBuilder analyzer(String analyzer) {
|
||||
this.analyzer = analyzer;
|
||||
extraSet = true;
|
||||
return this;
|
||||
@ -173,7 +173,7 @@ public class FieldJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* Should leading wildcards be allowed or not. Defaults to <tt>true</tt>.
|
||||
*/
|
||||
public FieldJsonQueryBuilder allowLeadingWildcard(boolean allowLeadingWildcard) {
|
||||
public FieldQueryBuilder allowLeadingWildcard(boolean allowLeadingWildcard) {
|
||||
this.allowLeadingWildcard = allowLeadingWildcard;
|
||||
extraSet = true;
|
||||
return this;
|
||||
@ -183,7 +183,7 @@ public class FieldJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* Whether terms of wildcard, prefix, fuzzy and range queries are to be automatically
|
||||
* lower-cased or not. Default is <tt>true</tt>.
|
||||
*/
|
||||
public FieldJsonQueryBuilder lowercaseExpandedTerms(boolean lowercaseExpandedTerms) {
|
||||
public FieldQueryBuilder lowercaseExpandedTerms(boolean lowercaseExpandedTerms) {
|
||||
this.lowercaseExpandedTerms = lowercaseExpandedTerms;
|
||||
extraSet = true;
|
||||
return this;
|
||||
@ -196,7 +196,7 @@ public class FieldJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* <p>When set, result phrase and multi-phrase queries will be aware of position increments.
|
||||
* Useful when e.g. a StopFilter increases the position increment of the token that follows an omitted token.
|
||||
*/
|
||||
public FieldJsonQueryBuilder enablePositionIncrements(boolean enablePositionIncrements) {
|
||||
public FieldQueryBuilder enablePositionIncrements(boolean enablePositionIncrements) {
|
||||
this.enablePositionIncrements = enablePositionIncrements;
|
||||
extraSet = true;
|
||||
return this;
|
||||
@ -205,7 +205,7 @@ public class FieldJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* Set the minimum similarity for fuzzy queries. Default is 0.5f.
|
||||
*/
|
||||
public FieldJsonQueryBuilder fuzzyMinSim(float fuzzyMinSim) {
|
||||
public FieldQueryBuilder fuzzyMinSim(float fuzzyMinSim) {
|
||||
this.fuzzyMinSim = fuzzyMinSim;
|
||||
extraSet = true;
|
||||
return this;
|
||||
@ -214,7 +214,7 @@ public class FieldJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* Set the prefix length for fuzzy queries. Default is 0.
|
||||
*/
|
||||
public FieldJsonQueryBuilder fuzzyPrefixLength(int fuzzyPrefixLength) {
|
||||
public FieldQueryBuilder fuzzyPrefixLength(int fuzzyPrefixLength) {
|
||||
this.fuzzyPrefixLength = fuzzyPrefixLength;
|
||||
extraSet = true;
|
||||
return this;
|
||||
@ -224,14 +224,14 @@ public class FieldJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* Sets the default slop for phrases. If zero, then exact phrase matches
|
||||
* are required. Default value is zero.
|
||||
*/
|
||||
public FieldJsonQueryBuilder phraseSlop(int phraseSlop) {
|
||||
public FieldQueryBuilder phraseSlop(int phraseSlop) {
|
||||
this.phraseSlop = phraseSlop;
|
||||
extraSet = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override public void doJson(JsonBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(FieldJsonQueryParser.NAME);
|
||||
@Override public void doXContent(XContentBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(FieldQueryParser.NAME);
|
||||
if (!extraSet) {
|
||||
builder.field(name, query);
|
||||
} else {
|
@ -17,24 +17,22 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.apache.lucene.analysis.Analyzer;
|
||||
import org.apache.lucene.queryParser.ParseException;
|
||||
import org.apache.lucene.queryParser.QueryParser;
|
||||
import org.apache.lucene.search.FuzzyQuery;
|
||||
import org.apache.lucene.search.Query;
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.codehaus.jackson.JsonToken;
|
||||
import org.elasticsearch.index.AbstractIndexComponent;
|
||||
import org.elasticsearch.index.Index;
|
||||
import org.elasticsearch.index.analysis.AnalysisService;
|
||||
import org.elasticsearch.index.query.QueryParsingException;
|
||||
import org.elasticsearch.index.query.support.MapperQueryParser;
|
||||
import org.elasticsearch.index.settings.IndexSettings;
|
||||
import org.elasticsearch.util.Booleans;
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.elasticsearch.util.settings.Settings;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@ -43,13 +41,13 @@ import static org.elasticsearch.util.lucene.search.Queries.*;
|
||||
/**
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class FieldJsonQueryParser extends AbstractIndexComponent implements JsonQueryParser {
|
||||
public class FieldQueryParser extends AbstractIndexComponent implements XContentQueryParser {
|
||||
|
||||
public static final String NAME = "field";
|
||||
|
||||
private final AnalysisService analysisService;
|
||||
|
||||
@Inject public FieldJsonQueryParser(Index index, @IndexSettings Settings settings, AnalysisService analysisService) {
|
||||
@Inject public FieldQueryParser(Index index, @IndexSettings Settings settings, AnalysisService analysisService) {
|
||||
super(index, settings);
|
||||
this.analysisService = analysisService;
|
||||
}
|
||||
@ -58,12 +56,12 @@ public class FieldJsonQueryParser extends AbstractIndexComponent implements Json
|
||||
return new String[]{NAME};
|
||||
}
|
||||
|
||||
@Override public Query parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
JsonParser jp = parseContext.jp();
|
||||
@Override public Query parse(QueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
XContentParser parser = parseContext.parser();
|
||||
|
||||
JsonToken token = jp.nextToken();
|
||||
assert token == JsonToken.FIELD_NAME;
|
||||
String fieldName = jp.getCurrentName();
|
||||
XContentParser.Token token = parser.nextToken();
|
||||
assert token == XContentParser.Token.FIELD_NAME;
|
||||
String fieldName = parser.currentName();
|
||||
|
||||
String queryString = null;
|
||||
float boost = 1.0f;
|
||||
@ -75,27 +73,27 @@ public class FieldJsonQueryParser extends AbstractIndexComponent implements Json
|
||||
int fuzzyPrefixLength = FuzzyQuery.defaultPrefixLength;
|
||||
boolean escape = false;
|
||||
Analyzer analyzer = null;
|
||||
token = jp.nextToken();
|
||||
if (token == JsonToken.START_OBJECT) {
|
||||
token = parser.nextToken();
|
||||
if (token == XContentParser.Token.START_OBJECT) {
|
||||
String currentFieldName = null;
|
||||
while ((token = jp.nextToken()) != JsonToken.END_OBJECT) {
|
||||
if (token == JsonToken.FIELD_NAME) {
|
||||
currentFieldName = jp.getCurrentName();
|
||||
} else if (token == JsonToken.VALUE_STRING) {
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
|
||||
if (token == XContentParser.Token.FIELD_NAME) {
|
||||
currentFieldName = parser.currentName();
|
||||
} else if (token.isValue()) {
|
||||
if ("query".equals(currentFieldName)) {
|
||||
queryString = jp.getText();
|
||||
queryString = parser.text();
|
||||
} else if ("boost".equals(currentFieldName)) {
|
||||
boost = Float.parseFloat(jp.getText());
|
||||
boost = parser.floatValue();
|
||||
} else if ("enable_position_increments".equals(currentFieldName) || "enablePositionIncrements".equals(currentFieldName)) {
|
||||
enablePositionIncrements = Booleans.parseBoolean(jp.getText(), true);
|
||||
enablePositionIncrements = parser.booleanValue();
|
||||
} else if ("lowercase_expanded_terms".equals(currentFieldName) || "lowercaseExpandedTerms".equals(currentFieldName)) {
|
||||
lowercaseExpandedTerms = Booleans.parseBoolean(jp.getText(), true);
|
||||
lowercaseExpandedTerms = parser.booleanValue();
|
||||
} else if ("phrase_slop".equals(currentFieldName) || "phraseSlop".equals(currentFieldName)) {
|
||||
phraseSlop = Integer.parseInt(jp.getText());
|
||||
phraseSlop = parser.intValue();
|
||||
} else if ("analyzer".equals(currentFieldName)) {
|
||||
analyzer = analysisService.analyzer(jp.getText());
|
||||
analyzer = analysisService.analyzer(parser.text());
|
||||
} else if ("default_operator".equals(currentFieldName) || "defaultOperator".equals(currentFieldName)) {
|
||||
String op = jp.getText();
|
||||
String op = parser.text();
|
||||
if ("or".equalsIgnoreCase(op)) {
|
||||
defaultOperator = QueryParser.Operator.OR;
|
||||
} else if ("and".equalsIgnoreCase(op)) {
|
||||
@ -104,65 +102,19 @@ public class FieldJsonQueryParser extends AbstractIndexComponent implements Json
|
||||
throw new QueryParsingException(index, "Query default operator [" + op + "] is not allowed");
|
||||
}
|
||||
} else if ("fuzzy_min_sim".equals(currentFieldName) || "fuzzyMinSim".equals(currentFieldName)) {
|
||||
fuzzyMinSim = Float.parseFloat(jp.getText());
|
||||
fuzzyMinSim = parser.floatValue();
|
||||
} else if ("fuzzy_prefix_length".equals(currentFieldName) || "fuzzyPrefixLength".equals(currentFieldName)) {
|
||||
fuzzyPrefixLength = Integer.parseInt(jp.getText());
|
||||
fuzzyPrefixLength = parser.intValue();
|
||||
} else if ("escape".equals(currentFieldName)) {
|
||||
escape = Booleans.parseBoolean(jp.getText(), false);
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_NUMBER_INT) {
|
||||
if ("query".equals(currentFieldName)) {
|
||||
queryString = jp.getText();
|
||||
} else if ("boost".equals(currentFieldName)) {
|
||||
boost = jp.getIntValue();
|
||||
} else if ("enable_position_increments".equals(currentFieldName) || "enablePositionIncrements".equals(currentFieldName)) {
|
||||
enablePositionIncrements = jp.getIntValue() != 0;
|
||||
} else if ("lowercase_expanded_terms".equals(currentFieldName) || "lowercaseExpandedTerms".equals(currentFieldName)) {
|
||||
lowercaseExpandedTerms = jp.getIntValue() != 0;
|
||||
} else if ("phrase_slop".equals(currentFieldName) || "phraseSlop".equals(currentFieldName)) {
|
||||
phraseSlop = jp.getIntValue();
|
||||
} else if ("fuzzy_min_sim".equals(currentFieldName) || "fuzzyMinSim".equals(currentFieldName)) {
|
||||
fuzzyMinSim = jp.getIntValue();
|
||||
} else if ("fuzzy_prefix_length".equals(currentFieldName) || "fuzzyPrefixLength".equals(currentFieldName)) {
|
||||
fuzzyPrefixLength = jp.getIntValue();
|
||||
} else if ("escape".equals(currentFieldName)) {
|
||||
escape = jp.getIntValue() != 0;
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_NUMBER_FLOAT) {
|
||||
if ("query".equals(currentFieldName)) {
|
||||
queryString = jp.getText();
|
||||
} else if ("boost".equals(currentFieldName)) {
|
||||
boost = jp.getFloatValue();
|
||||
} else if ("fuzzy_prefix_length".equals(currentFieldName) || "fuzzyPrefixLength".equals(currentFieldName)) {
|
||||
fuzzyPrefixLength = jp.getIntValue();
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_TRUE) {
|
||||
if ("query".equals(currentFieldName)) {
|
||||
queryString = jp.getText();
|
||||
} else if ("enable_position_increments".equals(currentFieldName) || "enablePositionIncrements".equals(currentFieldName)) {
|
||||
enablePositionIncrements = true;
|
||||
} else if ("lowercase_expanded_terms".equals(currentFieldName) || "lowercaseExpandedTerms".equals(currentFieldName)) {
|
||||
lowercaseExpandedTerms = true;
|
||||
} else if ("escape".equals(currentFieldName)) {
|
||||
escape = true;
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_FALSE) {
|
||||
if ("query".equals(currentFieldName)) {
|
||||
queryString = jp.getText();
|
||||
} else if ("enable_position_increments".equals(currentFieldName) || "enablePositionIncrements".equals(currentFieldName)) {
|
||||
enablePositionIncrements = false;
|
||||
} else if ("lowercase_expanded_terms".equals(currentFieldName) || "lowercaseExpandedTerms".equals(currentFieldName)) {
|
||||
lowercaseExpandedTerms = false;
|
||||
} else if ("escape".equals(currentFieldName)) {
|
||||
escape = false;
|
||||
escape = parser.booleanValue();
|
||||
}
|
||||
}
|
||||
}
|
||||
jp.nextToken();
|
||||
parser.nextToken();
|
||||
} else {
|
||||
queryString = jp.getText();
|
||||
queryString = parser.text();
|
||||
// move to the next token
|
||||
jp.nextToken();
|
||||
parser.nextToken();
|
||||
}
|
||||
|
||||
if (analyzer == null) {
|
@ -17,14 +17,14 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
/**
|
||||
* A static factory for simple "import static" usage.
|
||||
*
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public abstract class JsonFilterBuilders {
|
||||
public abstract class FilterBuilders {
|
||||
|
||||
/**
|
||||
* A filter for a field based on a term.
|
||||
@ -32,8 +32,8 @@ public abstract class JsonFilterBuilders {
|
||||
* @param name The field name
|
||||
* @param value The term value
|
||||
*/
|
||||
public static TermJsonFilterBuilder termFilter(String name, String value) {
|
||||
return new TermJsonFilterBuilder(name, value);
|
||||
public static TermFilterBuilder termFilter(String name, String value) {
|
||||
return new TermFilterBuilder(name, value);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -42,8 +42,8 @@ public abstract class JsonFilterBuilders {
|
||||
* @param name The field name
|
||||
* @param value The term value
|
||||
*/
|
||||
public static TermJsonFilterBuilder termFilter(String name, int value) {
|
||||
return new TermJsonFilterBuilder(name, value);
|
||||
public static TermFilterBuilder termFilter(String name, int value) {
|
||||
return new TermFilterBuilder(name, value);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -52,8 +52,8 @@ public abstract class JsonFilterBuilders {
|
||||
* @param name The field name
|
||||
* @param value The term value
|
||||
*/
|
||||
public static TermJsonFilterBuilder termFilter(String name, long value) {
|
||||
return new TermJsonFilterBuilder(name, value);
|
||||
public static TermFilterBuilder termFilter(String name, long value) {
|
||||
return new TermFilterBuilder(name, value);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -62,8 +62,8 @@ public abstract class JsonFilterBuilders {
|
||||
* @param name The field name
|
||||
* @param value The term value
|
||||
*/
|
||||
public static TermJsonFilterBuilder termFilter(String name, float value) {
|
||||
return new TermJsonFilterBuilder(name, value);
|
||||
public static TermFilterBuilder termFilter(String name, float value) {
|
||||
return new TermFilterBuilder(name, value);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -72,8 +72,8 @@ public abstract class JsonFilterBuilders {
|
||||
* @param name The field name
|
||||
* @param value The term value
|
||||
*/
|
||||
public static TermJsonFilterBuilder termFilter(String name, double value) {
|
||||
return new TermJsonFilterBuilder(name, value);
|
||||
public static TermFilterBuilder termFilter(String name, double value) {
|
||||
return new TermFilterBuilder(name, value);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -82,8 +82,8 @@ public abstract class JsonFilterBuilders {
|
||||
* @param name The field name
|
||||
* @param value The term value
|
||||
*/
|
||||
public static TermJsonFilterBuilder termFilter(String name, Object value) {
|
||||
return new TermJsonFilterBuilder(name, value);
|
||||
public static TermFilterBuilder termFilter(String name, Object value) {
|
||||
return new TermFilterBuilder(name, value);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -92,8 +92,8 @@ public abstract class JsonFilterBuilders {
|
||||
* @param name The field name
|
||||
* @param values The terms
|
||||
*/
|
||||
public static TermsJsonFilterBuilder termsFilter(String name, String... values) {
|
||||
return new TermsJsonFilterBuilder(name, values);
|
||||
public static TermsFilterBuilder termsFilter(String name, String... values) {
|
||||
return new TermsFilterBuilder(name, values);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -102,8 +102,8 @@ public abstract class JsonFilterBuilders {
|
||||
* @param name The field name
|
||||
* @param values The terms
|
||||
*/
|
||||
public static TermsJsonFilterBuilder termsFilter(String name, int... values) {
|
||||
return new TermsJsonFilterBuilder(name, values);
|
||||
public static TermsFilterBuilder termsFilter(String name, int... values) {
|
||||
return new TermsFilterBuilder(name, values);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -112,8 +112,8 @@ public abstract class JsonFilterBuilders {
|
||||
* @param name The field name
|
||||
* @param values The terms
|
||||
*/
|
||||
public static TermsJsonFilterBuilder termsFilter(String name, long... values) {
|
||||
return new TermsJsonFilterBuilder(name, values);
|
||||
public static TermsFilterBuilder termsFilter(String name, long... values) {
|
||||
return new TermsFilterBuilder(name, values);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -122,8 +122,8 @@ public abstract class JsonFilterBuilders {
|
||||
* @param name The field name
|
||||
* @param values The terms
|
||||
*/
|
||||
public static TermsJsonFilterBuilder termsFilter(String name, float... values) {
|
||||
return new TermsJsonFilterBuilder(name, values);
|
||||
public static TermsFilterBuilder termsFilter(String name, float... values) {
|
||||
return new TermsFilterBuilder(name, values);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -132,8 +132,8 @@ public abstract class JsonFilterBuilders {
|
||||
* @param name The field name
|
||||
* @param values The terms
|
||||
*/
|
||||
public static TermsJsonFilterBuilder termsFilter(String name, double... values) {
|
||||
return new TermsJsonFilterBuilder(name, values);
|
||||
public static TermsFilterBuilder termsFilter(String name, double... values) {
|
||||
return new TermsFilterBuilder(name, values);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -142,8 +142,8 @@ public abstract class JsonFilterBuilders {
|
||||
* @param name The field name
|
||||
* @param values The terms
|
||||
*/
|
||||
public static TermsJsonFilterBuilder termsFilter(String name, Object... values) {
|
||||
return new TermsJsonFilterBuilder(name, values);
|
||||
public static TermsFilterBuilder termsFilter(String name, Object... values) {
|
||||
return new TermsFilterBuilder(name, values);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -153,8 +153,8 @@ public abstract class JsonFilterBuilders {
|
||||
* @param name The field name
|
||||
* @param prefix The prefix
|
||||
*/
|
||||
public static PrefixJsonFilterBuilder prefixFilter(String name, String prefix) {
|
||||
return new PrefixJsonFilterBuilder(name, prefix);
|
||||
public static PrefixFilterBuilder prefixFilter(String name, String prefix) {
|
||||
return new PrefixFilterBuilder(name, prefix);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -162,8 +162,8 @@ public abstract class JsonFilterBuilders {
|
||||
*
|
||||
* @param name The field name
|
||||
*/
|
||||
public static RangeJsonFilterBuilder rangeFilter(String name) {
|
||||
return new RangeJsonFilterBuilder(name);
|
||||
public static RangeFilterBuilder rangeFilter(String name) {
|
||||
return new RangeFilterBuilder(name);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -171,15 +171,15 @@ public abstract class JsonFilterBuilders {
|
||||
*
|
||||
* @param queryBuilder The query to wrap as a filter
|
||||
*/
|
||||
public static QueryJsonFilterBuilder queryFilter(JsonQueryBuilder queryBuilder) {
|
||||
return new QueryJsonFilterBuilder(queryBuilder);
|
||||
public static QueryFilterBuilder queryFilter(XContentQueryBuilder queryBuilder) {
|
||||
return new QueryFilterBuilder(queryBuilder);
|
||||
}
|
||||
|
||||
public static BoolJsonFilterBuilder boolFilter() {
|
||||
return new BoolJsonFilterBuilder();
|
||||
public static BoolFilterBuilder boolFilter() {
|
||||
return new BoolFilterBuilder();
|
||||
}
|
||||
|
||||
private JsonFilterBuilders() {
|
||||
private FilterBuilders() {
|
||||
|
||||
}
|
||||
}
|
@ -17,9 +17,9 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.json.JsonBuilder;
|
||||
import org.elasticsearch.util.xcontent.builder.XContentBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@ -28,11 +28,11 @@ import java.io.IOException;
|
||||
*
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class FilteredJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
public class FilteredQueryBuilder extends BaseQueryBuilder {
|
||||
|
||||
private final JsonQueryBuilder queryBuilder;
|
||||
private final XContentQueryBuilder queryBuilder;
|
||||
|
||||
private final JsonFilterBuilder filterBuilder;
|
||||
private final XContentFilterBuilder filterBuilder;
|
||||
|
||||
private float boost = -1;
|
||||
|
||||
@ -42,7 +42,7 @@ public class FilteredJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* @param queryBuilder The query to apply the filter to
|
||||
* @param filterBuilder The filter to apply on the query
|
||||
*/
|
||||
public FilteredJsonQueryBuilder(JsonQueryBuilder queryBuilder, JsonFilterBuilder filterBuilder) {
|
||||
public FilteredQueryBuilder(XContentQueryBuilder queryBuilder, XContentFilterBuilder filterBuilder) {
|
||||
this.queryBuilder = queryBuilder;
|
||||
this.filterBuilder = filterBuilder;
|
||||
}
|
||||
@ -51,17 +51,17 @@ public class FilteredJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* Sets the boost for this query. Documents matching this query will (in addition to the normal
|
||||
* weightings) have their score multiplied by the boost provided.
|
||||
*/
|
||||
public FilteredJsonQueryBuilder boost(float boost) {
|
||||
public FilteredQueryBuilder boost(float boost) {
|
||||
this.boost = boost;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override protected void doJson(JsonBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(FilteredJsonQueryParser.NAME);
|
||||
@Override protected void doXContent(XContentBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(FilteredQueryParser.NAME);
|
||||
builder.field("query");
|
||||
queryBuilder.toJson(builder, params);
|
||||
queryBuilder.toXContent(builder, params);
|
||||
builder.field("filter");
|
||||
filterBuilder.toJson(builder, params);
|
||||
filterBuilder.toXContent(builder, params);
|
||||
if (boost != -1) {
|
||||
builder.field("boost", boost);
|
||||
}
|
@ -17,30 +17,29 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.apache.lucene.search.Filter;
|
||||
import org.apache.lucene.search.FilteredQuery;
|
||||
import org.apache.lucene.search.Query;
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.codehaus.jackson.JsonToken;
|
||||
import org.elasticsearch.index.AbstractIndexComponent;
|
||||
import org.elasticsearch.index.Index;
|
||||
import org.elasticsearch.index.query.QueryParsingException;
|
||||
import org.elasticsearch.index.settings.IndexSettings;
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.elasticsearch.util.settings.Settings;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class FilteredJsonQueryParser extends AbstractIndexComponent implements JsonQueryParser {
|
||||
public class FilteredQueryParser extends AbstractIndexComponent implements XContentQueryParser {
|
||||
|
||||
public static final String NAME = "filtered";
|
||||
|
||||
@Inject public FilteredJsonQueryParser(Index index, @IndexSettings Settings settings) {
|
||||
@Inject public FilteredQueryParser(Index index, @IndexSettings Settings settings) {
|
||||
super(index, settings);
|
||||
}
|
||||
|
||||
@ -48,31 +47,27 @@ public class FilteredJsonQueryParser extends AbstractIndexComponent implements J
|
||||
return new String[]{NAME};
|
||||
}
|
||||
|
||||
@Override public Query parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
JsonParser jp = parseContext.jp();
|
||||
@Override public Query parse(QueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
XContentParser parser = parseContext.parser();
|
||||
|
||||
Query query = null;
|
||||
Filter filter = null;
|
||||
float boost = 1.0f;
|
||||
|
||||
String currentFieldName = null;
|
||||
JsonToken token;
|
||||
while ((token = jp.nextToken()) != JsonToken.END_OBJECT) {
|
||||
if (token == JsonToken.FIELD_NAME) {
|
||||
currentFieldName = jp.getCurrentName();
|
||||
} else if (token == JsonToken.START_OBJECT) {
|
||||
XContentParser.Token token;
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
|
||||
if (token == XContentParser.Token.FIELD_NAME) {
|
||||
currentFieldName = parser.currentName();
|
||||
} else if (token == XContentParser.Token.START_OBJECT) {
|
||||
if ("query".equals(currentFieldName)) {
|
||||
query = parseContext.parseInnerQuery();
|
||||
} else if ("filter".equals(currentFieldName)) {
|
||||
filter = parseContext.parseInnerFilter();
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_STRING) {
|
||||
} else if (token.isValue()) {
|
||||
if ("boost".equals(currentFieldName)) {
|
||||
boost = Float.parseFloat(jp.getText());
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_NUMBER_INT || token == JsonToken.VALUE_NUMBER_FLOAT) {
|
||||
if ("boost".equals(currentFieldName)) {
|
||||
boost = jp.getFloatValue();
|
||||
boost = parser.floatValue();
|
||||
}
|
||||
}
|
||||
}
|
@ -17,17 +17,17 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.index.query.QueryBuilderException;
|
||||
import org.elasticsearch.util.json.JsonBuilder;
|
||||
import org.elasticsearch.util.xcontent.builder.XContentBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class FuzzyLikeThisFieldJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
public class FuzzyLikeThisFieldQueryBuilder extends BaseQueryBuilder {
|
||||
|
||||
private final String name;
|
||||
|
||||
@ -44,45 +44,45 @@ public class FuzzyLikeThisFieldJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
*
|
||||
* @param name the name of the field
|
||||
*/
|
||||
public FuzzyLikeThisFieldJsonQueryBuilder(String name) {
|
||||
public FuzzyLikeThisFieldQueryBuilder(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
/**
|
||||
* The text to use in order to find documents that are "like" this.
|
||||
*/
|
||||
public FuzzyLikeThisFieldJsonQueryBuilder likeText(String likeText) {
|
||||
public FuzzyLikeThisFieldQueryBuilder likeText(String likeText) {
|
||||
this.likeText = likeText;
|
||||
return this;
|
||||
}
|
||||
|
||||
public FuzzyLikeThisFieldJsonQueryBuilder minSimilarity(float minSimilarity) {
|
||||
public FuzzyLikeThisFieldQueryBuilder minSimilarity(float minSimilarity) {
|
||||
this.minSimilarity = minSimilarity;
|
||||
return this;
|
||||
}
|
||||
|
||||
public FuzzyLikeThisFieldJsonQueryBuilder prefixLength(int prefixLength) {
|
||||
public FuzzyLikeThisFieldQueryBuilder prefixLength(int prefixLength) {
|
||||
this.prefixLength = prefixLength;
|
||||
return this;
|
||||
}
|
||||
|
||||
public FuzzyLikeThisFieldJsonQueryBuilder maxQueryTerms(int maxQueryTerms) {
|
||||
public FuzzyLikeThisFieldQueryBuilder maxQueryTerms(int maxQueryTerms) {
|
||||
this.maxQueryTerms = maxQueryTerms;
|
||||
return this;
|
||||
}
|
||||
|
||||
public FuzzyLikeThisFieldJsonQueryBuilder ignoreTF(boolean ignoreTF) {
|
||||
public FuzzyLikeThisFieldQueryBuilder ignoreTF(boolean ignoreTF) {
|
||||
this.ignoreTF = ignoreTF;
|
||||
return this;
|
||||
}
|
||||
|
||||
public FuzzyLikeThisFieldJsonQueryBuilder boost(float boost) {
|
||||
public FuzzyLikeThisFieldQueryBuilder boost(float boost) {
|
||||
this.boost = boost;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override protected void doJson(JsonBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(FuzzyLikeThisFieldJsonQueryParser.NAME);
|
||||
@Override protected void doXContent(XContentBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(FuzzyLikeThisFieldQueryParser.NAME);
|
||||
builder.startObject(name);
|
||||
if (likeText == null) {
|
||||
throw new QueryBuilderException("fuzzyLikeThis requires 'likeText' to be provided");
|
@ -17,21 +17,19 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.apache.lucene.analysis.Analyzer;
|
||||
import org.apache.lucene.search.FuzzyLikeThisQuery;
|
||||
import org.apache.lucene.search.Query;
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.codehaus.jackson.JsonToken;
|
||||
import org.elasticsearch.index.AbstractIndexComponent;
|
||||
import org.elasticsearch.index.Index;
|
||||
import org.elasticsearch.index.mapper.MapperService;
|
||||
import org.elasticsearch.index.query.QueryParsingException;
|
||||
import org.elasticsearch.index.settings.IndexSettings;
|
||||
import org.elasticsearch.util.Booleans;
|
||||
import org.elasticsearch.util.Strings;
|
||||
import org.elasticsearch.util.settings.Settings;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@ -51,11 +49,11 @@ import static org.elasticsearch.index.query.support.QueryParsers.*;
|
||||
*
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class FuzzyLikeThisFieldJsonQueryParser extends AbstractIndexComponent implements JsonQueryParser {
|
||||
public class FuzzyLikeThisFieldQueryParser extends AbstractIndexComponent implements XContentQueryParser {
|
||||
|
||||
public static final String NAME = "flt_field";
|
||||
|
||||
public FuzzyLikeThisFieldJsonQueryParser(Index index, @IndexSettings Settings indexSettings) {
|
||||
public FuzzyLikeThisFieldQueryParser(Index index, @IndexSettings Settings indexSettings) {
|
||||
super(index, indexSettings);
|
||||
}
|
||||
|
||||
@ -63,8 +61,8 @@ public class FuzzyLikeThisFieldJsonQueryParser extends AbstractIndexComponent im
|
||||
return new String[]{NAME, "fuzzy_like_this_field", Strings.toCamelCase(NAME), "fuzzyLikeThisField"};
|
||||
}
|
||||
|
||||
@Override public Query parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
JsonParser jp = parseContext.jp();
|
||||
@Override public Query parse(QueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
XContentParser parser = parseContext.parser();
|
||||
|
||||
int maxNumTerms = 25;
|
||||
float boost = 1.0f;
|
||||
@ -73,44 +71,28 @@ public class FuzzyLikeThisFieldJsonQueryParser extends AbstractIndexComponent im
|
||||
int prefixLength = 0;
|
||||
boolean ignoreTF = false;
|
||||
|
||||
JsonToken token = jp.nextToken();
|
||||
assert token == JsonToken.FIELD_NAME;
|
||||
String fieldName = jp.getCurrentName();
|
||||
XContentParser.Token token = parser.nextToken();
|
||||
assert token == XContentParser.Token.FIELD_NAME;
|
||||
String fieldName = parser.currentName();
|
||||
|
||||
// now, we move after the field name, which starts the object
|
||||
token = jp.nextToken();
|
||||
assert token == JsonToken.START_OBJECT;
|
||||
token = parser.nextToken();
|
||||
assert token == XContentParser.Token.START_OBJECT;
|
||||
|
||||
|
||||
String currentFieldName = null;
|
||||
while ((token = jp.nextToken()) != JsonToken.END_OBJECT) {
|
||||
if (token == JsonToken.FIELD_NAME) {
|
||||
currentFieldName = jp.getCurrentName();
|
||||
} else if (token == JsonToken.VALUE_STRING) {
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
|
||||
if (token == XContentParser.Token.FIELD_NAME) {
|
||||
currentFieldName = parser.currentName();
|
||||
} else if (token.isValue()) {
|
||||
if ("like_text".equals(currentFieldName) || "likeText".equals(currentFieldName)) {
|
||||
likeText = jp.getText();
|
||||
likeText = parser.text();
|
||||
} else if ("max_query_terms".equals(currentFieldName) || "maxQueryTerms".equals(currentFieldName)) {
|
||||
maxNumTerms = Integer.parseInt(jp.getText());
|
||||
maxNumTerms = parser.intValue();
|
||||
} else if ("boost".equals(currentFieldName)) {
|
||||
boost = Float.parseFloat(jp.getText());
|
||||
boost = parser.floatValue();
|
||||
} else if ("ignore_tf".equals(currentFieldName) || "ignoreTF".equals(currentFieldName)) {
|
||||
ignoreTF = Booleans.parseBoolean(jp.getText(), false);
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_NUMBER_INT) {
|
||||
if ("max_query_terms".equals(currentFieldName) || "maxQueryTerms".equals(currentFieldName)) {
|
||||
maxNumTerms = jp.getIntValue();
|
||||
} else if ("boost".equals(currentFieldName)) {
|
||||
boost = jp.getIntValue();
|
||||
} else if ("ignore_tf".equals(currentFieldName) || "ignoreTF".equals(currentFieldName)) {
|
||||
ignoreTF = jp.getIntValue() != 0;
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_TRUE) {
|
||||
if ("ignore_tf".equals(currentFieldName) || "ignoreTF".equals(currentFieldName)) {
|
||||
ignoreTF = true;
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_NUMBER_FLOAT) {
|
||||
if ("boost".equals(currentFieldName)) {
|
||||
boost = jp.getFloatValue();
|
||||
ignoreTF = parser.booleanValue();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -137,8 +119,8 @@ public class FuzzyLikeThisFieldJsonQueryParser extends AbstractIndexComponent im
|
||||
query.setIgnoreTF(ignoreTF);
|
||||
|
||||
// move to the next end object, to close the field name
|
||||
token = jp.nextToken();
|
||||
assert token == JsonToken.END_OBJECT;
|
||||
token = parser.nextToken();
|
||||
assert token == XContentParser.Token.END_OBJECT;
|
||||
|
||||
return wrapSmartNameQuery(query, smartNameFieldMappers, parseContext.indexCache());
|
||||
}
|
@ -17,17 +17,17 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.index.query.QueryBuilderException;
|
||||
import org.elasticsearch.util.json.JsonBuilder;
|
||||
import org.elasticsearch.util.xcontent.builder.XContentBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class FuzzyLikeThisJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
public class FuzzyLikeThisQueryBuilder extends BaseQueryBuilder {
|
||||
|
||||
private final String[] fields;
|
||||
|
||||
@ -42,7 +42,7 @@ public class FuzzyLikeThisJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* Constructs a new fuzzy like this query which uses the "_all" field.
|
||||
*/
|
||||
public FuzzyLikeThisJsonQueryBuilder() {
|
||||
public FuzzyLikeThisQueryBuilder() {
|
||||
this.fields = null;
|
||||
}
|
||||
|
||||
@ -51,45 +51,45 @@ public class FuzzyLikeThisJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
*
|
||||
* @param fields the field names that will be used when generating the 'Fuzzy Like This' query.
|
||||
*/
|
||||
public FuzzyLikeThisJsonQueryBuilder(String... fields) {
|
||||
public FuzzyLikeThisQueryBuilder(String... fields) {
|
||||
this.fields = fields;
|
||||
}
|
||||
|
||||
/**
|
||||
* The text to use in order to find documents that are "like" this.
|
||||
*/
|
||||
public FuzzyLikeThisJsonQueryBuilder likeText(String likeText) {
|
||||
public FuzzyLikeThisQueryBuilder likeText(String likeText) {
|
||||
this.likeText = likeText;
|
||||
return this;
|
||||
}
|
||||
|
||||
public FuzzyLikeThisJsonQueryBuilder minSimilarity(float minSimilarity) {
|
||||
public FuzzyLikeThisQueryBuilder minSimilarity(float minSimilarity) {
|
||||
this.minSimilarity = minSimilarity;
|
||||
return this;
|
||||
}
|
||||
|
||||
public FuzzyLikeThisJsonQueryBuilder prefixLength(int prefixLength) {
|
||||
public FuzzyLikeThisQueryBuilder prefixLength(int prefixLength) {
|
||||
this.prefixLength = prefixLength;
|
||||
return this;
|
||||
}
|
||||
|
||||
public FuzzyLikeThisJsonQueryBuilder maxQueryTerms(int maxQueryTerms) {
|
||||
public FuzzyLikeThisQueryBuilder maxQueryTerms(int maxQueryTerms) {
|
||||
this.maxQueryTerms = maxQueryTerms;
|
||||
return this;
|
||||
}
|
||||
|
||||
public FuzzyLikeThisJsonQueryBuilder ignoreTF(boolean ignoreTF) {
|
||||
public FuzzyLikeThisQueryBuilder ignoreTF(boolean ignoreTF) {
|
||||
this.ignoreTF = ignoreTF;
|
||||
return this;
|
||||
}
|
||||
|
||||
public FuzzyLikeThisJsonQueryBuilder boost(float boost) {
|
||||
public FuzzyLikeThisQueryBuilder boost(float boost) {
|
||||
this.boost = boost;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override protected void doJson(JsonBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(FuzzyLikeThisJsonQueryParser.NAME);
|
||||
@Override protected void doXContent(XContentBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(FuzzyLikeThisQueryParser.NAME);
|
||||
if (fields != null) {
|
||||
builder.startArray("fields");
|
||||
for (String field : fields) {
|
@ -17,20 +17,18 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.gcommon.collect.Lists;
|
||||
import org.apache.lucene.search.FuzzyLikeThisQuery;
|
||||
import org.apache.lucene.search.Query;
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.codehaus.jackson.JsonToken;
|
||||
import org.elasticsearch.index.AbstractIndexComponent;
|
||||
import org.elasticsearch.index.Index;
|
||||
import org.elasticsearch.index.mapper.AllFieldMapper;
|
||||
import org.elasticsearch.index.query.QueryParsingException;
|
||||
import org.elasticsearch.index.settings.IndexSettings;
|
||||
import org.elasticsearch.util.Booleans;
|
||||
import org.elasticsearch.util.gcommon.collect.Lists;
|
||||
import org.elasticsearch.util.settings.Settings;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
@ -49,11 +47,11 @@ import java.util.List;
|
||||
*
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class FuzzyLikeThisJsonQueryParser extends AbstractIndexComponent implements JsonQueryParser {
|
||||
public class FuzzyLikeThisQueryParser extends AbstractIndexComponent implements XContentQueryParser {
|
||||
|
||||
public static final String NAME = "flt";
|
||||
|
||||
public FuzzyLikeThisJsonQueryParser(Index index, @IndexSettings Settings indexSettings) {
|
||||
public FuzzyLikeThisQueryParser(Index index, @IndexSettings Settings indexSettings) {
|
||||
super(index, indexSettings);
|
||||
}
|
||||
|
||||
@ -61,8 +59,8 @@ public class FuzzyLikeThisJsonQueryParser extends AbstractIndexComponent impleme
|
||||
return new String[]{NAME, "fuzzy_like_this", "fuzzyLikeThis"};
|
||||
}
|
||||
|
||||
@Override public Query parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
JsonParser jp = parseContext.jp();
|
||||
@Override public Query parse(QueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
XContentParser parser = parseContext.parser();
|
||||
|
||||
int maxNumTerms = 25;
|
||||
float boost = 1.0f;
|
||||
@ -72,42 +70,26 @@ public class FuzzyLikeThisJsonQueryParser extends AbstractIndexComponent impleme
|
||||
int prefixLength = 0;
|
||||
boolean ignoreTF = false;
|
||||
|
||||
JsonToken token;
|
||||
XContentParser.Token token;
|
||||
String currentFieldName = null;
|
||||
while ((token = jp.nextToken()) != JsonToken.END_OBJECT) {
|
||||
if (token == JsonToken.FIELD_NAME) {
|
||||
currentFieldName = jp.getCurrentName();
|
||||
} else if (token == JsonToken.VALUE_STRING) {
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
|
||||
if (token == XContentParser.Token.FIELD_NAME) {
|
||||
currentFieldName = parser.currentName();
|
||||
} else if (token.isValue()) {
|
||||
if ("like_text".equals(currentFieldName) || "likeText".equals(currentFieldName)) {
|
||||
likeText = jp.getText();
|
||||
likeText = parser.text();
|
||||
} else if ("max_query_terms".equals(currentFieldName) || "maxQueryTerms".equals(currentFieldName)) {
|
||||
maxNumTerms = Integer.parseInt(jp.getText());
|
||||
maxNumTerms = parser.intValue();
|
||||
} else if ("boost".equals(currentFieldName)) {
|
||||
boost = Float.parseFloat(jp.getText());
|
||||
boost = parser.floatValue();
|
||||
} else if ("ignore_tf".equals(currentFieldName) || "ignoreTF".equals(currentFieldName)) {
|
||||
ignoreTF = Booleans.parseBoolean(jp.getText(), false);
|
||||
ignoreTF = parser.booleanValue();
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_NUMBER_INT) {
|
||||
if ("max_query_terms".equals(currentFieldName) || "maxQueryTerms".equals(currentFieldName)) {
|
||||
maxNumTerms = jp.getIntValue();
|
||||
} else if ("boost".equals(currentFieldName)) {
|
||||
boost = jp.getIntValue();
|
||||
} else if ("ignore_tf".equals(currentFieldName) || "ignoreTF".equals(currentFieldName)) {
|
||||
ignoreTF = jp.getIntValue() != 0;
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_TRUE) {
|
||||
if ("ignore_tf".equals(currentFieldName) || "ignoreTF".equals(currentFieldName)) {
|
||||
ignoreTF = true;
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_NUMBER_FLOAT) {
|
||||
if ("boost".equals(currentFieldName)) {
|
||||
boost = jp.getFloatValue();
|
||||
}
|
||||
} else if (token == JsonToken.START_ARRAY) {
|
||||
} else if (token == XContentParser.Token.START_ARRAY) {
|
||||
if ("fields".equals(currentFieldName)) {
|
||||
fields = Lists.newArrayList();
|
||||
while ((token = jp.nextToken()) != JsonToken.END_ARRAY) {
|
||||
fields.add(parseContext.indexName(jp.getText()));
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
|
||||
fields.add(parseContext.indexName(parser.text()));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -130,8 +112,8 @@ public class FuzzyLikeThisJsonQueryParser extends AbstractIndexComponent impleme
|
||||
query.setIgnoreTF(ignoreTF);
|
||||
|
||||
// move to the next end object, to close the field name
|
||||
token = jp.nextToken();
|
||||
assert token == JsonToken.END_OBJECT;
|
||||
token = parser.nextToken();
|
||||
assert token == XContentParser.Token.END_OBJECT;
|
||||
|
||||
return query;
|
||||
}
|
@ -17,9 +17,9 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.json.JsonBuilder;
|
||||
import org.elasticsearch.util.xcontent.builder.XContentBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@ -28,7 +28,7 @@ import java.io.IOException;
|
||||
*
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class MatchAllJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
public class MatchAllQueryBuilder extends BaseQueryBuilder {
|
||||
|
||||
private String normsField;
|
||||
|
||||
@ -37,7 +37,7 @@ public class MatchAllJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* Field used for normalization factor (document boost). Defaults to no field.
|
||||
*/
|
||||
public MatchAllJsonQueryBuilder normsField(String normsField) {
|
||||
public MatchAllQueryBuilder normsField(String normsField) {
|
||||
this.normsField = normsField;
|
||||
return this;
|
||||
}
|
||||
@ -46,13 +46,13 @@ public class MatchAllJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* Sets the boost for this query. Documents matching this query will (in addition to the normal
|
||||
* weightings) have their score multiplied by the boost provided.
|
||||
*/
|
||||
public MatchAllJsonQueryBuilder boost(float boost) {
|
||||
public MatchAllQueryBuilder boost(float boost) {
|
||||
this.boost = boost;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override public void doJson(JsonBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(MatchAllJsonQueryParser.NAME);
|
||||
@Override public void doXContent(XContentBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(MatchAllQueryParser.NAME);
|
||||
if (boost != -1) {
|
||||
builder.field("boost", boost);
|
||||
}
|
@ -17,30 +17,29 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.apache.lucene.search.MatchAllDocsQuery;
|
||||
import org.apache.lucene.search.Query;
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.codehaus.jackson.JsonToken;
|
||||
import org.elasticsearch.index.AbstractIndexComponent;
|
||||
import org.elasticsearch.index.Index;
|
||||
import org.elasticsearch.index.query.QueryParsingException;
|
||||
import org.elasticsearch.index.settings.IndexSettings;
|
||||
import org.elasticsearch.util.Strings;
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.elasticsearch.util.settings.Settings;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class MatchAllJsonQueryParser extends AbstractIndexComponent implements JsonQueryParser {
|
||||
public class MatchAllQueryParser extends AbstractIndexComponent implements XContentQueryParser {
|
||||
|
||||
public static final String NAME = "match_all";
|
||||
|
||||
@Inject public MatchAllJsonQueryParser(Index index, @IndexSettings Settings settings) {
|
||||
@Inject public MatchAllQueryParser(Index index, @IndexSettings Settings settings) {
|
||||
super(index, settings);
|
||||
}
|
||||
|
||||
@ -48,26 +47,22 @@ public class MatchAllJsonQueryParser extends AbstractIndexComponent implements J
|
||||
return new String[]{NAME, Strings.toCamelCase(NAME)};
|
||||
}
|
||||
|
||||
@Override public Query parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
JsonParser jp = parseContext.jp();
|
||||
@Override public Query parse(QueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
XContentParser parser = parseContext.parser();
|
||||
|
||||
float boost = 1.0f;
|
||||
String normsField = null;
|
||||
String currentFieldName = null;
|
||||
|
||||
JsonToken token;
|
||||
while ((token = jp.nextToken()) != JsonToken.END_OBJECT) {
|
||||
if (token == JsonToken.FIELD_NAME) {
|
||||
currentFieldName = jp.getCurrentName();
|
||||
} else if (token == JsonToken.VALUE_STRING) {
|
||||
XContentParser.Token token;
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
|
||||
if (token == XContentParser.Token.FIELD_NAME) {
|
||||
currentFieldName = parser.currentName();
|
||||
} else if (token.isValue()) {
|
||||
if ("boost".equals(currentFieldName)) {
|
||||
boost = Float.parseFloat(jp.getText());
|
||||
boost = parser.floatValue();
|
||||
} else if ("norms_field".equals(currentFieldName) || "normsField".equals(currentFieldName)) {
|
||||
normsField = parseContext.indexName(jp.getText());
|
||||
}
|
||||
} else {
|
||||
if ("boost".equals(currentFieldName)) {
|
||||
boost = jp.getFloatValue();
|
||||
normsField = parseContext.indexName(parser.text());
|
||||
}
|
||||
}
|
||||
}
|
@ -17,10 +17,10 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.index.query.QueryBuilderException;
|
||||
import org.elasticsearch.util.json.JsonBuilder;
|
||||
import org.elasticsearch.util.xcontent.builder.XContentBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@ -29,7 +29,7 @@ import java.io.IOException;
|
||||
*
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class MoreLikeThisFieldJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
public class MoreLikeThisFieldQueryBuilder extends BaseQueryBuilder {
|
||||
|
||||
private final String name;
|
||||
|
||||
@ -50,14 +50,14 @@ public class MoreLikeThisFieldJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
*
|
||||
* @param name The field name to run the query against
|
||||
*/
|
||||
public MoreLikeThisFieldJsonQueryBuilder(String name) {
|
||||
public MoreLikeThisFieldQueryBuilder(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
/**
|
||||
* The text to use in order to find documents that are "like" this.
|
||||
*/
|
||||
public MoreLikeThisFieldJsonQueryBuilder likeText(String likeText) {
|
||||
public MoreLikeThisFieldQueryBuilder likeText(String likeText) {
|
||||
this.likeText = likeText;
|
||||
return this;
|
||||
}
|
||||
@ -65,7 +65,7 @@ public class MoreLikeThisFieldJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* The percentage of terms to match. Defaults to <tt>0.3</tt>.
|
||||
*/
|
||||
public MoreLikeThisFieldJsonQueryBuilder percentTermsToMatch(float percentTermsToMatch) {
|
||||
public MoreLikeThisFieldQueryBuilder percentTermsToMatch(float percentTermsToMatch) {
|
||||
this.percentTermsToMatch = percentTermsToMatch;
|
||||
return this;
|
||||
}
|
||||
@ -74,7 +74,7 @@ public class MoreLikeThisFieldJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* The frequency below which terms will be ignored in the source doc. The default
|
||||
* frequency is <tt>2</tt>.
|
||||
*/
|
||||
public MoreLikeThisFieldJsonQueryBuilder minTermFreq(int minTermFreqy) {
|
||||
public MoreLikeThisFieldQueryBuilder minTermFreq(int minTermFreqy) {
|
||||
this.minTermFreq = minTermFreqy;
|
||||
return this;
|
||||
}
|
||||
@ -83,7 +83,7 @@ public class MoreLikeThisFieldJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* Sets the maximum number of query terms that will be included in any generated query.
|
||||
* Defaults to <tt>25</tt>.
|
||||
*/
|
||||
public MoreLikeThisFieldJsonQueryBuilder maxQueryTerms(int maxQueryTerms) {
|
||||
public MoreLikeThisFieldQueryBuilder maxQueryTerms(int maxQueryTerms) {
|
||||
this.maxQueryTerms = maxQueryTerms;
|
||||
return this;
|
||||
}
|
||||
@ -95,7 +95,7 @@ public class MoreLikeThisFieldJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* might want to tell the MoreLikeThis code to ignore them, as for the purposes of document similarity it seems
|
||||
* reasonable to assume that "a stop word is never interesting".
|
||||
*/
|
||||
public MoreLikeThisFieldJsonQueryBuilder stopWords(String... stopWords) {
|
||||
public MoreLikeThisFieldQueryBuilder stopWords(String... stopWords) {
|
||||
this.stopWords = stopWords;
|
||||
return this;
|
||||
}
|
||||
@ -104,7 +104,7 @@ public class MoreLikeThisFieldJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* Sets the frequency at which words will be ignored which do not occur in at least this
|
||||
* many docs. Defaults to <tt>5</tt>.
|
||||
*/
|
||||
public MoreLikeThisFieldJsonQueryBuilder minDocFreq(int minDocFreq) {
|
||||
public MoreLikeThisFieldQueryBuilder minDocFreq(int minDocFreq) {
|
||||
this.minDocFreq = minDocFreq;
|
||||
return this;
|
||||
}
|
||||
@ -113,7 +113,7 @@ public class MoreLikeThisFieldJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* Set the maximum frequency in which words may still appear. Words that appear
|
||||
* in more than this many docs will be ignored. Defaults to unbounded.
|
||||
*/
|
||||
public MoreLikeThisFieldJsonQueryBuilder maxDocFreq(int maxDocFreq) {
|
||||
public MoreLikeThisFieldQueryBuilder maxDocFreq(int maxDocFreq) {
|
||||
this.maxDocFreq = maxDocFreq;
|
||||
return this;
|
||||
}
|
||||
@ -122,7 +122,7 @@ public class MoreLikeThisFieldJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* Sets the minimum word length below which words will be ignored. Defaults
|
||||
* to <tt>0</tt>.
|
||||
*/
|
||||
public MoreLikeThisFieldJsonQueryBuilder minWordLen(int minWordLen) {
|
||||
public MoreLikeThisFieldQueryBuilder minWordLen(int minWordLen) {
|
||||
this.minWordLen = minWordLen;
|
||||
return this;
|
||||
}
|
||||
@ -131,7 +131,7 @@ public class MoreLikeThisFieldJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* Sets the maximum word length above which words will be ignored. Defaults to
|
||||
* unbounded (<tt>0</tt>).
|
||||
*/
|
||||
public MoreLikeThisFieldJsonQueryBuilder maxWordLen(int maxWordLen) {
|
||||
public MoreLikeThisFieldQueryBuilder maxWordLen(int maxWordLen) {
|
||||
this.maxWordLen = maxWordLen;
|
||||
return this;
|
||||
}
|
||||
@ -139,18 +139,18 @@ public class MoreLikeThisFieldJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* Sets the boost factor to use when boosting terms. Defaults to <tt>1</tt>.
|
||||
*/
|
||||
public MoreLikeThisFieldJsonQueryBuilder boostTerms(float boostTerms) {
|
||||
public MoreLikeThisFieldQueryBuilder boostTerms(float boostTerms) {
|
||||
this.boostTerms = boostTerms;
|
||||
return this;
|
||||
}
|
||||
|
||||
public MoreLikeThisFieldJsonQueryBuilder boost(float boost) {
|
||||
public MoreLikeThisFieldQueryBuilder boost(float boost) {
|
||||
this.boost = boost;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override protected void doJson(JsonBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(MoreLikeThisFieldJsonQueryParser.NAME);
|
||||
@Override protected void doXContent(XContentBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(MoreLikeThisFieldQueryParser.NAME);
|
||||
builder.startObject(name);
|
||||
if (likeText == null) {
|
||||
throw new QueryBuilderException("moreLikeThisField requires 'like_text' to be provided");
|
@ -17,20 +17,19 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.gcommon.collect.Sets;
|
||||
import org.apache.lucene.search.Query;
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.codehaus.jackson.JsonToken;
|
||||
import org.elasticsearch.index.AbstractIndexComponent;
|
||||
import org.elasticsearch.index.Index;
|
||||
import org.elasticsearch.index.mapper.MapperService;
|
||||
import org.elasticsearch.index.query.QueryParsingException;
|
||||
import org.elasticsearch.index.settings.IndexSettings;
|
||||
import org.elasticsearch.util.Strings;
|
||||
import org.elasticsearch.util.gcommon.collect.Sets;
|
||||
import org.elasticsearch.util.lucene.search.MoreLikeThisQuery;
|
||||
import org.elasticsearch.util.settings.Settings;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Set;
|
||||
@ -40,11 +39,11 @@ import static org.elasticsearch.index.query.support.QueryParsers.*;
|
||||
/**
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class MoreLikeThisFieldJsonQueryParser extends AbstractIndexComponent implements JsonQueryParser {
|
||||
public class MoreLikeThisFieldQueryParser extends AbstractIndexComponent implements XContentQueryParser {
|
||||
|
||||
public static final String NAME = "mlt_field";
|
||||
|
||||
public MoreLikeThisFieldJsonQueryParser(Index index, @IndexSettings Settings indexSettings) {
|
||||
public MoreLikeThisFieldQueryParser(Index index, @IndexSettings Settings indexSettings) {
|
||||
super(index, indexSettings);
|
||||
}
|
||||
|
||||
@ -52,81 +51,51 @@ public class MoreLikeThisFieldJsonQueryParser extends AbstractIndexComponent imp
|
||||
return new String[]{NAME, "more_like_this_field", Strings.toCamelCase(NAME), "moreLikeThisField"};
|
||||
}
|
||||
|
||||
@Override public Query parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
JsonParser jp = parseContext.jp();
|
||||
@Override public Query parse(QueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
XContentParser parser = parseContext.parser();
|
||||
|
||||
JsonToken token = jp.nextToken();
|
||||
assert token == JsonToken.FIELD_NAME;
|
||||
String fieldName = jp.getCurrentName();
|
||||
XContentParser.Token token = parser.nextToken();
|
||||
assert token == XContentParser.Token.FIELD_NAME;
|
||||
String fieldName = parser.currentName();
|
||||
|
||||
// now, we move after the field name, which starts the object
|
||||
token = jp.nextToken();
|
||||
assert token == JsonToken.START_OBJECT;
|
||||
token = parser.nextToken();
|
||||
assert token == XContentParser.Token.START_OBJECT;
|
||||
|
||||
|
||||
MoreLikeThisQuery mltQuery = new MoreLikeThisQuery();
|
||||
mltQuery.setSimilarity(parseContext.searchSimilarity());
|
||||
|
||||
String currentFieldName = null;
|
||||
while ((token = jp.nextToken()) != JsonToken.END_OBJECT) {
|
||||
if (token == JsonToken.FIELD_NAME) {
|
||||
currentFieldName = jp.getCurrentName();
|
||||
} else if (token == JsonToken.VALUE_STRING) {
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
|
||||
if (token == XContentParser.Token.FIELD_NAME) {
|
||||
currentFieldName = parser.currentName();
|
||||
} else if (token.isValue()) {
|
||||
if ("like_text".equals(currentFieldName)) {
|
||||
mltQuery.setLikeText(jp.getText());
|
||||
mltQuery.setLikeText(parser.text());
|
||||
} else if ("min_term_freq".equals(currentFieldName) || "minTermFreq".equals(currentFieldName)) {
|
||||
mltQuery.setMinTermFrequency(Integer.parseInt(jp.getText()));
|
||||
mltQuery.setMinTermFrequency(parser.intValue());
|
||||
} else if ("max_query_terms".equals(currentFieldName) || "maxQueryTerms".equals(currentFieldName)) {
|
||||
mltQuery.setMaxQueryTerms(Integer.parseInt(jp.getText()));
|
||||
mltQuery.setMaxQueryTerms(parser.intValue());
|
||||
} else if ("min_doc_freq".equals(currentFieldName) || "minDocFreq".equals(currentFieldName)) {
|
||||
mltQuery.setMinDocFreq(Integer.parseInt(jp.getText()));
|
||||
mltQuery.setMinDocFreq(parser.intValue());
|
||||
} else if ("max_doc_freq".equals(currentFieldName) || "maxDocFreq".equals(currentFieldName)) {
|
||||
mltQuery.setMaxDocFreq(Integer.parseInt(jp.getText()));
|
||||
mltQuery.setMaxDocFreq(parser.intValue());
|
||||
} else if ("min_word_len".equals(currentFieldName) || "minWordLen".equals(currentFieldName)) {
|
||||
mltQuery.setMinWordLen(Integer.parseInt(jp.getText()));
|
||||
mltQuery.setMinWordLen(parser.intValue());
|
||||
} else if ("max_word_len".equals(currentFieldName) || "maxWordLen".equals(currentFieldName)) {
|
||||
mltQuery.setMaxWordLen(Integer.parseInt(jp.getText()));
|
||||
mltQuery.setMaxWordLen(parser.intValue());
|
||||
} else if ("boost_terms".equals(currentFieldName) || "boostTerms".equals(currentFieldName)) {
|
||||
mltQuery.setBoostTerms(true);
|
||||
mltQuery.setBoostTermsFactor(Float.parseFloat(jp.getText()));
|
||||
mltQuery.setBoostTermsFactor(parser.floatValue());
|
||||
} else if ("percent_terms_to_match".equals(currentFieldName) || "percentTermsToMatch".equals(currentFieldName)) {
|
||||
mltQuery.setPercentTermsToMatch(Float.parseFloat(jp.getText()));
|
||||
mltQuery.setPercentTermsToMatch(parser.floatValue());
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_NUMBER_INT) {
|
||||
if ("min_term_freq".equals(currentFieldName) || "minTermFreq".equals(currentFieldName)) {
|
||||
mltQuery.setMinTermFrequency(jp.getIntValue());
|
||||
} else if ("max_query_terms".equals(currentFieldName) || "maxQueryTerms".equals(currentFieldName)) {
|
||||
mltQuery.setMaxQueryTerms(jp.getIntValue());
|
||||
} else if ("min_doc_freq".equals(currentFieldName) || "minDocFreq".equals(currentFieldName)) {
|
||||
mltQuery.setMinDocFreq(jp.getIntValue());
|
||||
} else if ("max_doc_freq".equals(currentFieldName) || "maxDocFreq".equals(currentFieldName)) {
|
||||
mltQuery.setMaxDocFreq(jp.getIntValue());
|
||||
} else if ("min_word_len".equals(currentFieldName) || "minWordLen".equals(currentFieldName)) {
|
||||
mltQuery.setMinWordLen(jp.getIntValue());
|
||||
} else if ("max_word_len".equals(currentFieldName) || "maxWordLen".equals(currentFieldName)) {
|
||||
mltQuery.setMaxWordLen(jp.getIntValue());
|
||||
} else if ("boost_terms".equals(currentFieldName) || "boostTerms".equals(currentFieldName)) {
|
||||
mltQuery.setBoostTerms(true);
|
||||
mltQuery.setBoostTermsFactor(jp.getIntValue());
|
||||
} else if ("percent_terms_to_match".equals(currentFieldName) || "percentTermsToMatch".equals(currentFieldName)) {
|
||||
mltQuery.setPercentTermsToMatch(jp.getIntValue());
|
||||
} else if ("boost".equals(currentFieldName)) {
|
||||
mltQuery.setBoost(jp.getIntValue());
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_NUMBER_FLOAT) {
|
||||
if ("boost_terms".equals(currentFieldName) || "boostTerms".equals(currentFieldName)) {
|
||||
mltQuery.setBoostTerms(true);
|
||||
mltQuery.setBoostTermsFactor(jp.getFloatValue());
|
||||
} else if ("percent_terms_to_match".equals(currentFieldName) || "percentTermsToMatch".equals(currentFieldName)) {
|
||||
mltQuery.setPercentTermsToMatch(jp.getFloatValue());
|
||||
} else if ("boost".equals(currentFieldName)) {
|
||||
mltQuery.setBoost(jp.getFloatValue());
|
||||
}
|
||||
} else if (token == JsonToken.START_ARRAY) {
|
||||
} else if (token == XContentParser.Token.START_ARRAY) {
|
||||
if ("stop_words".equals(currentFieldName) || "stopWords".equals(currentFieldName)) {
|
||||
Set<String> stopWords = Sets.newHashSet();
|
||||
while ((token = jp.nextToken()) != JsonToken.END_ARRAY) {
|
||||
stopWords.add(jp.getText());
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
|
||||
stopWords.add(parser.text());
|
||||
}
|
||||
mltQuery.setStopWords(stopWords);
|
||||
}
|
||||
@ -138,8 +107,8 @@ public class MoreLikeThisFieldJsonQueryParser extends AbstractIndexComponent imp
|
||||
}
|
||||
|
||||
// move to the next end object, to close the field name
|
||||
token = jp.nextToken();
|
||||
assert token == JsonToken.END_OBJECT;
|
||||
token = parser.nextToken();
|
||||
assert token == XContentParser.Token.END_OBJECT;
|
||||
|
||||
MapperService.SmartNameFieldMappers smartNameFieldMappers = parseContext.smartFieldMappers(fieldName);
|
||||
if (smartNameFieldMappers != null) {
|
@ -17,10 +17,10 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.index.query.QueryBuilderException;
|
||||
import org.elasticsearch.util.json.JsonBuilder;
|
||||
import org.elasticsearch.util.xcontent.builder.XContentBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@ -30,7 +30,7 @@ import java.io.IOException;
|
||||
*
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class MoreLikeThisJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
public class MoreLikeThisQueryBuilder extends BaseQueryBuilder {
|
||||
|
||||
private final String[] fields;
|
||||
|
||||
@ -49,7 +49,7 @@ public class MoreLikeThisJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* Constructs a new more like this query which uses the "_all" field.
|
||||
*/
|
||||
public MoreLikeThisJsonQueryBuilder() {
|
||||
public MoreLikeThisQueryBuilder() {
|
||||
this.fields = null;
|
||||
}
|
||||
|
||||
@ -58,14 +58,14 @@ public class MoreLikeThisJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
*
|
||||
* @param fields the field names that will be used when generating the 'More Like This' query.
|
||||
*/
|
||||
public MoreLikeThisJsonQueryBuilder(String... fields) {
|
||||
public MoreLikeThisQueryBuilder(String... fields) {
|
||||
this.fields = fields;
|
||||
}
|
||||
|
||||
/**
|
||||
* The text to use in order to find documents that are "like" this.
|
||||
*/
|
||||
public MoreLikeThisJsonQueryBuilder likeText(String likeText) {
|
||||
public MoreLikeThisQueryBuilder likeText(String likeText) {
|
||||
this.likeText = likeText;
|
||||
return this;
|
||||
}
|
||||
@ -73,7 +73,7 @@ public class MoreLikeThisJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* The percentage of terms to match. Defaults to <tt>0.3</tt>.
|
||||
*/
|
||||
public MoreLikeThisJsonQueryBuilder percentTermsToMatch(float percentTermsToMatch) {
|
||||
public MoreLikeThisQueryBuilder percentTermsToMatch(float percentTermsToMatch) {
|
||||
this.percentTermsToMatch = percentTermsToMatch;
|
||||
return this;
|
||||
}
|
||||
@ -82,7 +82,7 @@ public class MoreLikeThisJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* The frequency below which terms will be ignored in the source doc. The default
|
||||
* frequency is <tt>2</tt>.
|
||||
*/
|
||||
public MoreLikeThisJsonQueryBuilder minTermFreq(int minTermFreq) {
|
||||
public MoreLikeThisQueryBuilder minTermFreq(int minTermFreq) {
|
||||
this.minTermFreq = minTermFreq;
|
||||
return this;
|
||||
}
|
||||
@ -91,7 +91,7 @@ public class MoreLikeThisJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* Sets the maximum number of query terms that will be included in any generated query.
|
||||
* Defaults to <tt>25</tt>.
|
||||
*/
|
||||
public MoreLikeThisJsonQueryBuilder maxQueryTerms(int maxQueryTerms) {
|
||||
public MoreLikeThisQueryBuilder maxQueryTerms(int maxQueryTerms) {
|
||||
this.maxQueryTerms = maxQueryTerms;
|
||||
return this;
|
||||
}
|
||||
@ -103,7 +103,7 @@ public class MoreLikeThisJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* might want to tell the MoreLikeThis code to ignore them, as for the purposes of document similarity it seems
|
||||
* reasonable to assume that "a stop word is never interesting".
|
||||
*/
|
||||
public MoreLikeThisJsonQueryBuilder stopWords(String... stopWords) {
|
||||
public MoreLikeThisQueryBuilder stopWords(String... stopWords) {
|
||||
this.stopWords = stopWords;
|
||||
return this;
|
||||
}
|
||||
@ -112,7 +112,7 @@ public class MoreLikeThisJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* Sets the frequency at which words will be ignored which do not occur in at least this
|
||||
* many docs. Defaults to <tt>5</tt>.
|
||||
*/
|
||||
public MoreLikeThisJsonQueryBuilder minDocFreq(int minDocFreq) {
|
||||
public MoreLikeThisQueryBuilder minDocFreq(int minDocFreq) {
|
||||
this.minDocFreq = minDocFreq;
|
||||
return this;
|
||||
}
|
||||
@ -121,7 +121,7 @@ public class MoreLikeThisJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* Set the maximum frequency in which words may still appear. Words that appear
|
||||
* in more than this many docs will be ignored. Defaults to unbounded.
|
||||
*/
|
||||
public MoreLikeThisJsonQueryBuilder maxDocFreq(int maxDocFreq) {
|
||||
public MoreLikeThisQueryBuilder maxDocFreq(int maxDocFreq) {
|
||||
this.maxDocFreq = maxDocFreq;
|
||||
return this;
|
||||
}
|
||||
@ -130,7 +130,7 @@ public class MoreLikeThisJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* Sets the minimum word length below which words will be ignored. Defaults
|
||||
* to <tt>0</tt>.
|
||||
*/
|
||||
public MoreLikeThisJsonQueryBuilder minWordLen(int minWordLen) {
|
||||
public MoreLikeThisQueryBuilder minWordLen(int minWordLen) {
|
||||
this.minWordLen = minWordLen;
|
||||
return this;
|
||||
}
|
||||
@ -139,7 +139,7 @@ public class MoreLikeThisJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* Sets the maximum word length above which words will be ignored. Defaults to
|
||||
* unbounded (<tt>0</tt>).
|
||||
*/
|
||||
public MoreLikeThisJsonQueryBuilder maxWordLen(int maxWordLen) {
|
||||
public MoreLikeThisQueryBuilder maxWordLen(int maxWordLen) {
|
||||
this.maxWordLen = maxWordLen;
|
||||
return this;
|
||||
}
|
||||
@ -147,18 +147,18 @@ public class MoreLikeThisJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* Sets the boost factor to use when boosting terms. Defaults to <tt>1</tt>.
|
||||
*/
|
||||
public MoreLikeThisJsonQueryBuilder boostTerms(float boostTerms) {
|
||||
public MoreLikeThisQueryBuilder boostTerms(float boostTerms) {
|
||||
this.boostTerms = boostTerms;
|
||||
return this;
|
||||
}
|
||||
|
||||
public MoreLikeThisJsonQueryBuilder boost(float boost) {
|
||||
public MoreLikeThisQueryBuilder boost(float boost) {
|
||||
this.boost = boost;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override protected void doJson(JsonBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(MoreLikeThisJsonQueryParser.NAME);
|
||||
@Override protected void doXContent(XContentBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(MoreLikeThisQueryParser.NAME);
|
||||
if (fields != null) {
|
||||
builder.startArray("fields");
|
||||
for (String field : fields) {
|
@ -0,0 +1,117 @@
|
||||
/*
|
||||
* Licensed to Elastic Search and Shay Banon under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. Elastic Search 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.index.query.xcontent;
|
||||
|
||||
import org.apache.lucene.search.Query;
|
||||
import org.elasticsearch.index.AbstractIndexComponent;
|
||||
import org.elasticsearch.index.Index;
|
||||
import org.elasticsearch.index.mapper.AllFieldMapper;
|
||||
import org.elasticsearch.index.query.QueryParsingException;
|
||||
import org.elasticsearch.index.settings.IndexSettings;
|
||||
import org.elasticsearch.util.gcommon.collect.Lists;
|
||||
import org.elasticsearch.util.gcommon.collect.Sets;
|
||||
import org.elasticsearch.util.lucene.search.MoreLikeThisQuery;
|
||||
import org.elasticsearch.util.settings.Settings;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class MoreLikeThisQueryParser extends AbstractIndexComponent implements XContentQueryParser {
|
||||
|
||||
public static final String NAME = "mlt";
|
||||
|
||||
public MoreLikeThisQueryParser(Index index, @IndexSettings Settings indexSettings) {
|
||||
super(index, indexSettings);
|
||||
}
|
||||
|
||||
@Override public String[] names() {
|
||||
return new String[]{NAME, "more_like_this", "moreLikeThis"};
|
||||
}
|
||||
|
||||
@Override public Query parse(QueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
XContentParser parser = parseContext.parser();
|
||||
|
||||
MoreLikeThisQuery mltQuery = new MoreLikeThisQuery();
|
||||
mltQuery.setMoreLikeFields(new String[]{AllFieldMapper.NAME});
|
||||
mltQuery.setSimilarity(parseContext.searchSimilarity());
|
||||
|
||||
XContentParser.Token token;
|
||||
String currentFieldName = null;
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
|
||||
if (token == XContentParser.Token.FIELD_NAME) {
|
||||
currentFieldName = parser.currentName();
|
||||
} else if (token.isValue()) {
|
||||
if ("like_text".equals(currentFieldName) || "likeText".equals(currentFieldName)) {
|
||||
mltQuery.setLikeText(parser.text());
|
||||
} else if ("min_term_freq".equals(currentFieldName) || "minTermFreq".equals(currentFieldName)) {
|
||||
mltQuery.setMinTermFrequency(parser.intValue());
|
||||
} else if ("max_query_terms".equals(currentFieldName) || "maxQueryTerms".equals(currentFieldName)) {
|
||||
mltQuery.setMaxQueryTerms(parser.intValue());
|
||||
} else if ("min_doc_freq".equals(currentFieldName) || "minDocFreq".equals(currentFieldName)) {
|
||||
mltQuery.setMinDocFreq(parser.intValue());
|
||||
} else if ("max_doc_freq".equals(currentFieldName) || "maxDocFreq".equals(currentFieldName)) {
|
||||
mltQuery.setMaxDocFreq(parser.intValue());
|
||||
} else if ("min_word_len".equals(currentFieldName) || "minWordLen".equals(currentFieldName)) {
|
||||
mltQuery.setMinWordLen(parser.intValue());
|
||||
} else if ("max_word_len".equals(currentFieldName) || "maxWordLen".equals(currentFieldName)) {
|
||||
mltQuery.setMaxWordLen(parser.intValue());
|
||||
} else if ("boost_terms".equals(currentFieldName) || "boostTerms".equals(currentFieldName)) {
|
||||
mltQuery.setBoostTerms(true);
|
||||
mltQuery.setBoostTermsFactor(parser.floatValue());
|
||||
} else if ("percent_terms_to_match".equals(currentFieldName) || "percentTermsToMatch".equals(currentFieldName)) {
|
||||
mltQuery.setPercentTermsToMatch(parser.floatValue());
|
||||
}
|
||||
} else if (token == XContentParser.Token.START_ARRAY) {
|
||||
if ("stop_words".equals(currentFieldName) || "stopWords".equals(currentFieldName)) {
|
||||
Set<String> stopWords = Sets.newHashSet();
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
|
||||
stopWords.add(parser.text());
|
||||
}
|
||||
mltQuery.setStopWords(stopWords);
|
||||
} else if ("fields".equals(currentFieldName)) {
|
||||
List<String> fields = Lists.newArrayList();
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
|
||||
fields.add(parseContext.indexName(parser.text()));
|
||||
}
|
||||
mltQuery.setMoreLikeFields(fields.toArray(new String[fields.size()]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (mltQuery.getLikeText() == null) {
|
||||
throw new QueryParsingException(index, "more_like_this requires 'like_text' to be specified");
|
||||
}
|
||||
if (mltQuery.getMoreLikeFields() == null || mltQuery.getMoreLikeFields().length == 0) {
|
||||
throw new QueryParsingException(index, "more_like_this requires 'fields' to be specified");
|
||||
}
|
||||
|
||||
// move to the next end object, to close the field name
|
||||
token = parser.nextToken();
|
||||
assert token == XContentParser.Token.END_OBJECT;
|
||||
|
||||
mltQuery.setAnalyzer(parseContext.mapperService().searchAnalyzer());
|
||||
return mltQuery;
|
||||
}
|
||||
}
|
@ -17,9 +17,9 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.json.JsonBuilder;
|
||||
import org.elasticsearch.util.xcontent.builder.XContentBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@ -29,7 +29,7 @@ import java.io.IOException;
|
||||
*
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class PrefixJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
public class PrefixFilterBuilder extends BaseFilterBuilder {
|
||||
|
||||
private final String name;
|
||||
|
||||
@ -42,13 +42,13 @@ public class PrefixJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
* @param name The field name
|
||||
* @param prefix The prefix
|
||||
*/
|
||||
public PrefixJsonFilterBuilder(String name, String prefix) {
|
||||
public PrefixFilterBuilder(String name, String prefix) {
|
||||
this.name = name;
|
||||
this.prefix = prefix;
|
||||
}
|
||||
|
||||
@Override public void doJson(JsonBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(PrefixJsonFilterParser.NAME);
|
||||
@Override public void doXContent(XContentBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(PrefixFilterParser.NAME);
|
||||
builder.field(name, prefix);
|
||||
builder.endObject();
|
||||
}
|
@ -17,33 +17,32 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.apache.lucene.index.Term;
|
||||
import org.apache.lucene.search.Filter;
|
||||
import org.apache.lucene.search.PrefixFilter;
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.codehaus.jackson.JsonToken;
|
||||
import org.elasticsearch.index.AbstractIndexComponent;
|
||||
import org.elasticsearch.index.Index;
|
||||
import org.elasticsearch.index.mapper.MapperService;
|
||||
import org.elasticsearch.index.query.QueryParsingException;
|
||||
import org.elasticsearch.index.settings.IndexSettings;
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.elasticsearch.util.settings.Settings;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import static org.elasticsearch.index.query.support.QueryParsers.*;
|
||||
|
||||
/**
|
||||
* @author kimchy (Shay Banon)
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class PrefixJsonFilterParser extends AbstractIndexComponent implements JsonFilterParser {
|
||||
public class PrefixFilterParser extends AbstractIndexComponent implements XContentFilterParser {
|
||||
|
||||
public static final String NAME = "prefix";
|
||||
|
||||
@Inject public PrefixJsonFilterParser(Index index, @IndexSettings Settings settings) {
|
||||
@Inject public PrefixFilterParser(Index index, @IndexSettings Settings settings) {
|
||||
super(index, settings);
|
||||
}
|
||||
|
||||
@ -51,15 +50,15 @@ public class PrefixJsonFilterParser extends AbstractIndexComponent implements Js
|
||||
return new String[]{NAME};
|
||||
}
|
||||
|
||||
@Override public Filter parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
JsonParser jp = parseContext.jp();
|
||||
@Override public Filter parse(QueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
XContentParser parser = parseContext.parser();
|
||||
|
||||
JsonToken token = jp.nextToken();
|
||||
assert token == JsonToken.FIELD_NAME;
|
||||
String fieldName = jp.getCurrentName();
|
||||
jp.nextToken();
|
||||
String value = jp.getText();
|
||||
jp.nextToken();
|
||||
XContentParser.Token token = parser.nextToken();
|
||||
assert token == XContentParser.Token.FIELD_NAME;
|
||||
String fieldName = parser.currentName();
|
||||
parser.nextToken();
|
||||
String value = parser.text();
|
||||
parser.nextToken();
|
||||
|
||||
if (value == null) {
|
||||
throw new QueryParsingException(index, "No value specified for prefix query");
|
@ -17,9 +17,9 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.json.JsonBuilder;
|
||||
import org.elasticsearch.util.xcontent.builder.XContentBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@ -28,7 +28,7 @@ import java.io.IOException;
|
||||
*
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class PrefixJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
public class PrefixQueryBuilder extends BaseQueryBuilder {
|
||||
|
||||
private final String name;
|
||||
|
||||
@ -42,7 +42,7 @@ public class PrefixJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* @param name The name of the field
|
||||
* @param prefix The prefix query
|
||||
*/
|
||||
public PrefixJsonQueryBuilder(String name, String prefix) {
|
||||
public PrefixQueryBuilder(String name, String prefix) {
|
||||
this.name = name;
|
||||
this.prefix = prefix;
|
||||
}
|
||||
@ -51,13 +51,13 @@ public class PrefixJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* Sets the boost for this query. Documents matching this query will (in addition to the normal
|
||||
* weightings) have their score multiplied by the boost provided.
|
||||
*/
|
||||
public PrefixJsonQueryBuilder boost(float boost) {
|
||||
public PrefixQueryBuilder boost(float boost) {
|
||||
this.boost = boost;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override public void doJson(JsonBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(PrefixJsonQueryParser.NAME);
|
||||
@Override public void doXContent(XContentBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(PrefixQueryParser.NAME);
|
||||
if (boost == -1) {
|
||||
builder.field(name, prefix);
|
||||
} else {
|
@ -17,21 +17,20 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.apache.lucene.index.Term;
|
||||
import org.apache.lucene.search.MultiTermQuery;
|
||||
import org.apache.lucene.search.PrefixQuery;
|
||||
import org.apache.lucene.search.Query;
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.codehaus.jackson.JsonToken;
|
||||
import org.elasticsearch.index.AbstractIndexComponent;
|
||||
import org.elasticsearch.index.Index;
|
||||
import org.elasticsearch.index.mapper.MapperService;
|
||||
import org.elasticsearch.index.query.QueryParsingException;
|
||||
import org.elasticsearch.index.settings.IndexSettings;
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.elasticsearch.util.settings.Settings;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@ -40,11 +39,11 @@ import static org.elasticsearch.index.query.support.QueryParsers.*;
|
||||
/**
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class PrefixJsonQueryParser extends AbstractIndexComponent implements JsonQueryParser {
|
||||
public class PrefixQueryParser extends AbstractIndexComponent implements XContentQueryParser {
|
||||
|
||||
public static final String NAME = "prefix";
|
||||
|
||||
@Inject public PrefixJsonQueryParser(Index index, @IndexSettings Settings settings) {
|
||||
@Inject public PrefixQueryParser(Index index, @IndexSettings Settings settings) {
|
||||
super(index, settings);
|
||||
}
|
||||
|
||||
@ -52,41 +51,33 @@ public class PrefixJsonQueryParser extends AbstractIndexComponent implements Jso
|
||||
return new String[]{NAME};
|
||||
}
|
||||
|
||||
@Override public Query parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
JsonParser jp = parseContext.jp();
|
||||
@Override public Query parse(QueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
XContentParser parser = parseContext.parser();
|
||||
|
||||
JsonToken token = jp.nextToken();
|
||||
assert token == JsonToken.FIELD_NAME;
|
||||
String fieldName = jp.getCurrentName();
|
||||
XContentParser.Token token = parser.nextToken();
|
||||
assert token == XContentParser.Token.FIELD_NAME;
|
||||
String fieldName = parser.currentName();
|
||||
|
||||
|
||||
String value = null;
|
||||
float boost = 1.0f;
|
||||
token = jp.nextToken();
|
||||
if (token == JsonToken.START_OBJECT) {
|
||||
token = parser.nextToken();
|
||||
if (token == XContentParser.Token.START_OBJECT) {
|
||||
String currentFieldName = null;
|
||||
while ((token = jp.nextToken()) != JsonToken.END_OBJECT) {
|
||||
if (token == JsonToken.FIELD_NAME) {
|
||||
currentFieldName = jp.getCurrentName();
|
||||
} else if (token == JsonToken.VALUE_STRING) {
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
|
||||
if (token == XContentParser.Token.FIELD_NAME) {
|
||||
currentFieldName = parser.currentName();
|
||||
} else if (token.isValue()) {
|
||||
if (NAME.equals(currentFieldName)) {
|
||||
value = jp.getText();
|
||||
value = parser.text();
|
||||
} else if ("boost".equals(currentFieldName)) {
|
||||
boost = Float.parseFloat(jp.getText());
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_NUMBER_INT) {
|
||||
if ("boost".equals(currentFieldName)) {
|
||||
boost = jp.getIntValue();
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_NUMBER_FLOAT) {
|
||||
if ("boost".equals(currentFieldName)) {
|
||||
boost = jp.getFloatValue();
|
||||
boost = parser.floatValue();
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
value = jp.getText();
|
||||
jp.nextToken();
|
||||
value = parser.text();
|
||||
parser.nextToken();
|
||||
}
|
||||
|
||||
if (value == null) {
|
@ -17,20 +17,20 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
/**
|
||||
* A static factory for simple "import static" usage.
|
||||
*
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public abstract class JsonQueryBuilders {
|
||||
public abstract class QueryBuilders {
|
||||
|
||||
/**
|
||||
* A query that match on all documents.
|
||||
*/
|
||||
public static MatchAllJsonQueryBuilder matchAllQuery() {
|
||||
return new MatchAllJsonQueryBuilder();
|
||||
public static MatchAllQueryBuilder matchAllQuery() {
|
||||
return new MatchAllQueryBuilder();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -38,8 +38,8 @@ public abstract class JsonQueryBuilders {
|
||||
* with the maximum score for that document as produced by any sub-query, plus a tie breaking increment for any
|
||||
* additional matching sub-queries.
|
||||
*/
|
||||
public static DisMaxJsonQueryBuilder disMaxQuery() {
|
||||
return new DisMaxJsonQueryBuilder();
|
||||
public static DisMaxQueryBuilder disMaxQuery() {
|
||||
return new DisMaxQueryBuilder();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -48,8 +48,8 @@ public abstract class JsonQueryBuilders {
|
||||
* @param name The name of the field
|
||||
* @param value The value of the term
|
||||
*/
|
||||
public static TermJsonQueryBuilder termQuery(String name, String value) {
|
||||
return new TermJsonQueryBuilder(name, value);
|
||||
public static TermQueryBuilder termQuery(String name, String value) {
|
||||
return new TermQueryBuilder(name, value);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -58,8 +58,8 @@ public abstract class JsonQueryBuilders {
|
||||
* @param name The name of the field
|
||||
* @param value The value of the term
|
||||
*/
|
||||
public static TermJsonQueryBuilder termQuery(String name, int value) {
|
||||
return new TermJsonQueryBuilder(name, value);
|
||||
public static TermQueryBuilder termQuery(String name, int value) {
|
||||
return new TermQueryBuilder(name, value);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -68,8 +68,8 @@ public abstract class JsonQueryBuilders {
|
||||
* @param name The name of the field
|
||||
* @param value The value of the term
|
||||
*/
|
||||
public static TermJsonQueryBuilder termQuery(String name, long value) {
|
||||
return new TermJsonQueryBuilder(name, value);
|
||||
public static TermQueryBuilder termQuery(String name, long value) {
|
||||
return new TermQueryBuilder(name, value);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -78,8 +78,8 @@ public abstract class JsonQueryBuilders {
|
||||
* @param name The name of the field
|
||||
* @param value The value of the term
|
||||
*/
|
||||
public static TermJsonQueryBuilder termQuery(String name, float value) {
|
||||
return new TermJsonQueryBuilder(name, value);
|
||||
public static TermQueryBuilder termQuery(String name, float value) {
|
||||
return new TermQueryBuilder(name, value);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -88,67 +88,67 @@ public abstract class JsonQueryBuilders {
|
||||
* @param name The name of the field
|
||||
* @param value The value of the term
|
||||
*/
|
||||
public static TermJsonQueryBuilder termQuery(String name, double value) {
|
||||
return new TermJsonQueryBuilder(name, value);
|
||||
public static TermQueryBuilder termQuery(String name, double value) {
|
||||
return new TermQueryBuilder(name, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* A query that executes the query string against a field. It is a simplified
|
||||
* version of {@link QueryStringJsonQueryBuilder} that simply runs against
|
||||
* version of {@link QueryStringQueryBuilder} that simply runs against
|
||||
* a single field.
|
||||
*
|
||||
* @param name The name of the field
|
||||
*/
|
||||
public static FieldJsonQueryBuilder fieldQuery(String name, String query) {
|
||||
return new FieldJsonQueryBuilder(name, query);
|
||||
public static FieldQueryBuilder fieldQuery(String name, String query) {
|
||||
return new FieldQueryBuilder(name, query);
|
||||
}
|
||||
|
||||
/**
|
||||
* A query that executes the query string against a field. It is a simplified
|
||||
* version of {@link QueryStringJsonQueryBuilder} that simply runs against
|
||||
* version of {@link QueryStringQueryBuilder} that simply runs against
|
||||
* a single field.
|
||||
*
|
||||
* @param name The name of the field
|
||||
* @param query The query string
|
||||
*/
|
||||
public static FieldJsonQueryBuilder fieldQuery(String name, int query) {
|
||||
return new FieldJsonQueryBuilder(name, query);
|
||||
public static FieldQueryBuilder fieldQuery(String name, int query) {
|
||||
return new FieldQueryBuilder(name, query);
|
||||
}
|
||||
|
||||
/**
|
||||
* A query that executes the query string against a field. It is a simplified
|
||||
* version of {@link QueryStringJsonQueryBuilder} that simply runs against
|
||||
* version of {@link QueryStringQueryBuilder} that simply runs against
|
||||
* a single field.
|
||||
*
|
||||
* @param name The name of the field
|
||||
* @param query The query string
|
||||
*/
|
||||
public static FieldJsonQueryBuilder fieldQuery(String name, long query) {
|
||||
return new FieldJsonQueryBuilder(name, query);
|
||||
public static FieldQueryBuilder fieldQuery(String name, long query) {
|
||||
return new FieldQueryBuilder(name, query);
|
||||
}
|
||||
|
||||
/**
|
||||
* A query that executes the query string against a field. It is a simplified
|
||||
* version of {@link QueryStringJsonQueryBuilder} that simply runs against
|
||||
* version of {@link QueryStringQueryBuilder} that simply runs against
|
||||
* a single field.
|
||||
*
|
||||
* @param name The name of the field
|
||||
* @param query The query string
|
||||
*/
|
||||
public static FieldJsonQueryBuilder fieldQuery(String name, float query) {
|
||||
return new FieldJsonQueryBuilder(name, query);
|
||||
public static FieldQueryBuilder fieldQuery(String name, float query) {
|
||||
return new FieldQueryBuilder(name, query);
|
||||
}
|
||||
|
||||
/**
|
||||
* A query that executes the query string against a field. It is a simplified
|
||||
* version of {@link QueryStringJsonQueryBuilder} that simply runs against
|
||||
* version of {@link QueryStringQueryBuilder} that simply runs against
|
||||
* a single field.
|
||||
*
|
||||
* @param name The name of the field
|
||||
* @param query The query string
|
||||
*/
|
||||
public static FieldJsonQueryBuilder fieldQuery(String name, double query) {
|
||||
return new FieldJsonQueryBuilder(name, query);
|
||||
public static FieldQueryBuilder fieldQuery(String name, double query) {
|
||||
return new FieldQueryBuilder(name, query);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -157,8 +157,8 @@ public abstract class JsonQueryBuilders {
|
||||
* @param name The name of the field
|
||||
* @param prefix The prefix query
|
||||
*/
|
||||
public static PrefixJsonQueryBuilder prefixQuery(String name, String prefix) {
|
||||
return new PrefixJsonQueryBuilder(name, prefix);
|
||||
public static PrefixQueryBuilder prefixQuery(String name, String prefix) {
|
||||
return new PrefixQueryBuilder(name, prefix);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -166,8 +166,8 @@ public abstract class JsonQueryBuilders {
|
||||
*
|
||||
* @param name The field name
|
||||
*/
|
||||
public static RangeJsonQueryBuilder rangeQuery(String name) {
|
||||
return new RangeJsonQueryBuilder(name);
|
||||
public static RangeQueryBuilder rangeQuery(String name) {
|
||||
return new RangeQueryBuilder(name);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -181,64 +181,64 @@ public abstract class JsonQueryBuilders {
|
||||
* @param name The field name
|
||||
* @param query The wildcard query string
|
||||
*/
|
||||
public static WildcardJsonQueryBuilder wildcardQuery(String name, String query) {
|
||||
return new WildcardJsonQueryBuilder(name, query);
|
||||
public static WildcardQueryBuilder wildcardQuery(String name, String query) {
|
||||
return new WildcardQueryBuilder(name, query);
|
||||
}
|
||||
|
||||
/**
|
||||
* A query that parses a query string and runs it. There are two modes that this operates. The first,
|
||||
* when no field is added (using {@link QueryStringJsonQueryBuilder#field(String)}, will run the query once and non prefixed fields
|
||||
* will use the {@link QueryStringJsonQueryBuilder#defaultField(String)} set. The second, when one or more fields are added
|
||||
* (using {@link QueryStringJsonQueryBuilder#field(String)}), will run the parsed query against the provided fields, and combine
|
||||
* them either using DisMax or a plain boolean query (see {@link QueryStringJsonQueryBuilder#useDisMax(boolean)}).
|
||||
* when no field is added (using {@link QueryStringQueryBuilder#field(String)}, will run the query once and non prefixed fields
|
||||
* will use the {@link QueryStringQueryBuilder#defaultField(String)} set. The second, when one or more fields are added
|
||||
* (using {@link QueryStringQueryBuilder#field(String)}), will run the parsed query against the provided fields, and combine
|
||||
* them either using DisMax or a plain boolean query (see {@link QueryStringQueryBuilder#useDisMax(boolean)}).
|
||||
*
|
||||
* @param queryString The query string to run
|
||||
*/
|
||||
public static QueryStringJsonQueryBuilder queryString(String queryString) {
|
||||
return new QueryStringJsonQueryBuilder(queryString);
|
||||
public static QueryStringQueryBuilder queryString(String queryString) {
|
||||
return new QueryStringQueryBuilder(queryString);
|
||||
}
|
||||
|
||||
/**
|
||||
* A Query that matches documents matching boolean combinations of other queries.
|
||||
*/
|
||||
public static BoolJsonQueryBuilder boolQuery() {
|
||||
return new BoolJsonQueryBuilder();
|
||||
public static BoolQueryBuilder boolQuery() {
|
||||
return new BoolQueryBuilder();
|
||||
}
|
||||
|
||||
public static SpanTermJsonQueryBuilder spanTermQuery(String name, String value) {
|
||||
return new SpanTermJsonQueryBuilder(name, value);
|
||||
public static SpanTermQueryBuilder spanTermQuery(String name, String value) {
|
||||
return new SpanTermQueryBuilder(name, value);
|
||||
}
|
||||
|
||||
public static SpanTermJsonQueryBuilder spanTermQuery(String name, int value) {
|
||||
return new SpanTermJsonQueryBuilder(name, value);
|
||||
public static SpanTermQueryBuilder spanTermQuery(String name, int value) {
|
||||
return new SpanTermQueryBuilder(name, value);
|
||||
}
|
||||
|
||||
public static SpanTermJsonQueryBuilder spanTermQuery(String name, long value) {
|
||||
return new SpanTermJsonQueryBuilder(name, value);
|
||||
public static SpanTermQueryBuilder spanTermQuery(String name, long value) {
|
||||
return new SpanTermQueryBuilder(name, value);
|
||||
}
|
||||
|
||||
public static SpanTermJsonQueryBuilder spanTermQuery(String name, float value) {
|
||||
return new SpanTermJsonQueryBuilder(name, value);
|
||||
public static SpanTermQueryBuilder spanTermQuery(String name, float value) {
|
||||
return new SpanTermQueryBuilder(name, value);
|
||||
}
|
||||
|
||||
public static SpanTermJsonQueryBuilder spanTermQuery(String name, double value) {
|
||||
return new SpanTermJsonQueryBuilder(name, value);
|
||||
public static SpanTermQueryBuilder spanTermQuery(String name, double value) {
|
||||
return new SpanTermQueryBuilder(name, value);
|
||||
}
|
||||
|
||||
public static SpanFirstJsonQueryBuilder spanFirstQuery(JsonSpanQueryBuilder match, int end) {
|
||||
return new SpanFirstJsonQueryBuilder(match, end);
|
||||
public static SpanFirstQueryBuilder spanFirstQuery(XContentSpanQueryBuilder match, int end) {
|
||||
return new SpanFirstQueryBuilder(match, end);
|
||||
}
|
||||
|
||||
public static SpanNearJsonQueryBuilder spanNearQuery() {
|
||||
return new SpanNearJsonQueryBuilder();
|
||||
public static SpanNearQueryBuilder spanNearQuery() {
|
||||
return new SpanNearQueryBuilder();
|
||||
}
|
||||
|
||||
public static SpanNotJsonQueryBuilder spanNotQuery() {
|
||||
return new SpanNotJsonQueryBuilder();
|
||||
public static SpanNotQueryBuilder spanNotQuery() {
|
||||
return new SpanNotQueryBuilder();
|
||||
}
|
||||
|
||||
public static SpanOrJsonQueryBuilder spanOrQuery() {
|
||||
return new SpanOrJsonQueryBuilder();
|
||||
public static SpanOrQueryBuilder spanOrQuery() {
|
||||
return new SpanOrQueryBuilder();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -247,8 +247,8 @@ public abstract class JsonQueryBuilders {
|
||||
* @param queryBuilder The query to apply the filter to
|
||||
* @param filterBuilder The filter to apply on the query
|
||||
*/
|
||||
public static FilteredJsonQueryBuilder filtered(JsonQueryBuilder queryBuilder, JsonFilterBuilder filterBuilder) {
|
||||
return new FilteredJsonQueryBuilder(queryBuilder, filterBuilder);
|
||||
public static FilteredQueryBuilder filtered(XContentQueryBuilder queryBuilder, XContentFilterBuilder filterBuilder) {
|
||||
return new FilteredQueryBuilder(queryBuilder, filterBuilder);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -257,51 +257,51 @@ public abstract class JsonQueryBuilders {
|
||||
*
|
||||
* @param filterBuilder The filter to wrap in a constant score query
|
||||
*/
|
||||
public static ConstantScoreQueryJsonQueryBuilder constantScoreQuery(JsonFilterBuilder filterBuilder) {
|
||||
return new ConstantScoreQueryJsonQueryBuilder(filterBuilder);
|
||||
public static ConstantScoreQueryBuilder constantScoreQuery(XContentFilterBuilder filterBuilder) {
|
||||
return new ConstantScoreQueryBuilder(filterBuilder);
|
||||
}
|
||||
|
||||
/**
|
||||
* A more like this query that finds documents that are "like" the provided {@link MoreLikeThisJsonQueryBuilder#likeText(String)}
|
||||
* A more like this query that finds documents that are "like" the provided {@link MoreLikeThisQueryBuilder#likeText(String)}
|
||||
* which is checked against the fields the query is constructed with.
|
||||
*
|
||||
* @param fields The fields to run the query against
|
||||
*/
|
||||
public static MoreLikeThisJsonQueryBuilder moreLikeThisQuery(String... fields) {
|
||||
return new MoreLikeThisJsonQueryBuilder(fields);
|
||||
public static MoreLikeThisQueryBuilder moreLikeThisQuery(String... fields) {
|
||||
return new MoreLikeThisQueryBuilder(fields);
|
||||
}
|
||||
|
||||
/**
|
||||
* A more like this query that finds documents that are "like" the provided {@link MoreLikeThisJsonQueryBuilder#likeText(String)}
|
||||
* A more like this query that finds documents that are "like" the provided {@link MoreLikeThisQueryBuilder#likeText(String)}
|
||||
* which is checked against the "_all" field.
|
||||
*/
|
||||
public static MoreLikeThisJsonQueryBuilder moreLikeThisQuery() {
|
||||
return new MoreLikeThisJsonQueryBuilder();
|
||||
public static MoreLikeThisQueryBuilder moreLikeThisQuery() {
|
||||
return new MoreLikeThisQueryBuilder();
|
||||
}
|
||||
|
||||
/**
|
||||
* A fuzzy like this query that finds documents that are "like" the provided {@link FuzzyLikeThisJsonQueryBuilder#likeText(String)}
|
||||
* A fuzzy like this query that finds documents that are "like" the provided {@link FuzzyLikeThisQueryBuilder#likeText(String)}
|
||||
* which is checked against the fields the query is constructed with.
|
||||
*
|
||||
* @param fields The fields to run the query against
|
||||
*/
|
||||
public static FuzzyLikeThisJsonQueryBuilder fuzzyLikeThisQuery(String... fields) {
|
||||
return new FuzzyLikeThisJsonQueryBuilder(fields);
|
||||
public static FuzzyLikeThisQueryBuilder fuzzyLikeThisQuery(String... fields) {
|
||||
return new FuzzyLikeThisQueryBuilder(fields);
|
||||
}
|
||||
|
||||
/**
|
||||
* A fuzzy like this query that finds documents that are "like" the provided {@link FuzzyLikeThisJsonQueryBuilder#likeText(String)}
|
||||
* A fuzzy like this query that finds documents that are "like" the provided {@link FuzzyLikeThisQueryBuilder#likeText(String)}
|
||||
* which is checked against the "_all" field.
|
||||
*/
|
||||
public static FuzzyLikeThisJsonQueryBuilder fuzzyLikeThisQuery() {
|
||||
return new FuzzyLikeThisJsonQueryBuilder();
|
||||
public static FuzzyLikeThisQueryBuilder fuzzyLikeThisQuery() {
|
||||
return new FuzzyLikeThisQueryBuilder();
|
||||
}
|
||||
|
||||
/**
|
||||
* A fuzzy like this query that finds documents that are "like" the provided {@link FuzzyLikeThisFieldJsonQueryBuilder#likeText(String)}.
|
||||
* A fuzzy like this query that finds documents that are "like" the provided {@link FuzzyLikeThisFieldQueryBuilder#likeText(String)}.
|
||||
*/
|
||||
public static FuzzyLikeThisFieldJsonQueryBuilder fuzzyLikeThisFieldQuery(String name) {
|
||||
return new FuzzyLikeThisFieldJsonQueryBuilder(name);
|
||||
public static FuzzyLikeThisFieldQueryBuilder fuzzyLikeThisFieldQuery(String name) {
|
||||
return new FuzzyLikeThisFieldQueryBuilder(name);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -309,11 +309,11 @@ public abstract class JsonQueryBuilders {
|
||||
*
|
||||
* @param name The field name
|
||||
*/
|
||||
public static MoreLikeThisFieldJsonQueryBuilder moreLikeThisFieldQuery(String name) {
|
||||
return new MoreLikeThisFieldJsonQueryBuilder(name);
|
||||
public static MoreLikeThisFieldQueryBuilder moreLikeThisFieldQuery(String name) {
|
||||
return new MoreLikeThisFieldQueryBuilder(name);
|
||||
}
|
||||
|
||||
private JsonQueryBuilders() {
|
||||
private QueryBuilders() {
|
||||
|
||||
}
|
||||
}
|
@ -17,9 +17,9 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.json.JsonBuilder;
|
||||
import org.elasticsearch.util.xcontent.builder.XContentBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@ -28,21 +28,21 @@ import java.io.IOException;
|
||||
*
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class QueryJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
public class QueryFilterBuilder extends BaseFilterBuilder {
|
||||
|
||||
private final JsonQueryBuilder queryBuilder;
|
||||
private final XContentQueryBuilder queryBuilder;
|
||||
|
||||
/**
|
||||
* A filter that simply wraps a query.
|
||||
*
|
||||
* @param queryBuilder The query to wrap as a filter
|
||||
*/
|
||||
public QueryJsonFilterBuilder(JsonQueryBuilder queryBuilder) {
|
||||
public QueryFilterBuilder(XContentQueryBuilder queryBuilder) {
|
||||
this.queryBuilder = queryBuilder;
|
||||
}
|
||||
|
||||
@Override protected void doJson(JsonBuilder builder, Params params) throws IOException {
|
||||
builder.field(QueryJsonFilterParser.NAME);
|
||||
queryBuilder.toJson(builder, params);
|
||||
@Override protected void doXContent(XContentBuilder builder, Params params) throws IOException {
|
||||
builder.field(QueryFilterParser.NAME);
|
||||
queryBuilder.toXContent(builder, params);
|
||||
}
|
||||
}
|
@ -17,29 +17,29 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.apache.lucene.search.Filter;
|
||||
import org.apache.lucene.search.Query;
|
||||
import org.apache.lucene.search.QueryWrapperFilter;
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.elasticsearch.index.AbstractIndexComponent;
|
||||
import org.elasticsearch.index.Index;
|
||||
import org.elasticsearch.index.query.QueryParsingException;
|
||||
import org.elasticsearch.index.settings.IndexSettings;
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.elasticsearch.util.settings.Settings;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* @author kimchy (Shay Banon)
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class QueryJsonFilterParser extends AbstractIndexComponent implements JsonFilterParser {
|
||||
public class QueryFilterParser extends AbstractIndexComponent implements XContentFilterParser {
|
||||
|
||||
public static final String NAME = "query";
|
||||
|
||||
@Inject public QueryJsonFilterParser(Index index, @IndexSettings Settings settings) {
|
||||
@Inject public QueryFilterParser(Index index, @IndexSettings Settings settings) {
|
||||
super(index, settings);
|
||||
}
|
||||
|
||||
@ -47,8 +47,8 @@ public class QueryJsonFilterParser extends AbstractIndexComponent implements Jso
|
||||
return new String[]{NAME};
|
||||
}
|
||||
|
||||
@Override public Filter parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
JsonParser jp = parseContext.jp();
|
||||
@Override public Filter parse(QueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
XContentParser parser = parseContext.parser();
|
||||
|
||||
Query query = parseContext.parseInnerQuery();
|
||||
Filter filter = new QueryWrapperFilter(query);
|
@ -17,13 +17,11 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.apache.lucene.search.Filter;
|
||||
import org.apache.lucene.search.Query;
|
||||
import org.apache.lucene.search.Similarity;
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.codehaus.jackson.JsonToken;
|
||||
import org.elasticsearch.index.Index;
|
||||
import org.elasticsearch.index.cache.IndexCache;
|
||||
import org.elasticsearch.index.mapper.FieldMapper;
|
||||
@ -31,6 +29,7 @@ import org.elasticsearch.index.mapper.FieldMappers;
|
||||
import org.elasticsearch.index.mapper.MapperService;
|
||||
import org.elasticsearch.index.query.QueryParsingException;
|
||||
import org.elasticsearch.index.similarity.SimilarityService;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.io.IOException;
|
||||
@ -38,7 +37,7 @@ import java.io.IOException;
|
||||
/**
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class JsonQueryParseContext {
|
||||
public class QueryParseContext {
|
||||
|
||||
private final Index index;
|
||||
|
||||
@ -48,12 +47,12 @@ public class JsonQueryParseContext {
|
||||
|
||||
private final IndexCache indexCache;
|
||||
|
||||
private final JsonQueryParserRegistry queryParserRegistry;
|
||||
private final XContentQueryParserRegistry queryParserRegistry;
|
||||
|
||||
private JsonParser jp;
|
||||
private XContentParser parser;
|
||||
|
||||
public JsonQueryParseContext(Index index, JsonQueryParserRegistry queryParserRegistry,
|
||||
MapperService mapperService, SimilarityService similarityService, IndexCache indexCache) {
|
||||
public QueryParseContext(Index index, XContentQueryParserRegistry queryParserRegistry,
|
||||
MapperService mapperService, SimilarityService similarityService, IndexCache indexCache) {
|
||||
this.index = index;
|
||||
this.queryParserRegistry = queryParserRegistry;
|
||||
this.mapperService = mapperService;
|
||||
@ -61,12 +60,12 @@ public class JsonQueryParseContext {
|
||||
this.indexCache = indexCache;
|
||||
}
|
||||
|
||||
public void reset(JsonParser jp) {
|
||||
this.jp = jp;
|
||||
public void reset(XContentParser jp) {
|
||||
this.parser = jp;
|
||||
}
|
||||
|
||||
public JsonParser jp() {
|
||||
return jp;
|
||||
public XContentParser parser() {
|
||||
return parser;
|
||||
}
|
||||
|
||||
public MapperService mapperService() {
|
||||
@ -91,52 +90,52 @@ public class JsonQueryParseContext {
|
||||
|
||||
public Query parseInnerQuery() throws IOException, QueryParsingException {
|
||||
// move to START object
|
||||
JsonToken token;
|
||||
if (jp.getCurrentToken() != JsonToken.START_OBJECT) {
|
||||
token = jp.nextToken();
|
||||
assert token == JsonToken.START_OBJECT;
|
||||
XContentParser.Token token;
|
||||
if (parser.currentToken() != XContentParser.Token.START_OBJECT) {
|
||||
token = parser.nextToken();
|
||||
assert token == XContentParser.Token.START_OBJECT;
|
||||
}
|
||||
token = jp.nextToken();
|
||||
assert token == JsonToken.FIELD_NAME;
|
||||
String queryName = jp.getCurrentName();
|
||||
token = parser.nextToken();
|
||||
assert token == XContentParser.Token.FIELD_NAME;
|
||||
String queryName = parser.currentName();
|
||||
// move to the next START_OBJECT
|
||||
token = jp.nextToken();
|
||||
assert token == JsonToken.START_OBJECT;
|
||||
token = parser.nextToken();
|
||||
assert token == XContentParser.Token.START_OBJECT;
|
||||
|
||||
JsonQueryParser queryParser = queryParserRegistry.queryParser(queryName);
|
||||
XContentQueryParser queryParser = queryParserRegistry.queryParser(queryName);
|
||||
if (queryParser == null) {
|
||||
throw new QueryParsingException(index, "No json query parser registered for [" + queryName + "]");
|
||||
throw new QueryParsingException(index, "No query parser registered for [" + queryName + "]");
|
||||
}
|
||||
Query result = queryParser.parse(this);
|
||||
if (jp.getCurrentToken() == JsonToken.END_OBJECT) {
|
||||
if (parser.currentToken() == XContentParser.Token.END_OBJECT) {
|
||||
// if we are at END_OBJECT, move to the next one...
|
||||
jp.nextToken();
|
||||
parser.nextToken();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public Filter parseInnerFilter() throws IOException, QueryParsingException {
|
||||
// move to START object
|
||||
JsonToken token;
|
||||
if (jp.getCurrentToken() != JsonToken.START_OBJECT) {
|
||||
token = jp.nextToken();
|
||||
assert token == JsonToken.START_OBJECT;
|
||||
XContentParser.Token token;
|
||||
if (parser.currentToken() != XContentParser.Token.START_OBJECT) {
|
||||
token = parser.nextToken();
|
||||
assert token == XContentParser.Token.START_OBJECT;
|
||||
}
|
||||
token = jp.nextToken();
|
||||
assert token == JsonToken.FIELD_NAME;
|
||||
String queryName = jp.getCurrentName();
|
||||
token = parser.nextToken();
|
||||
assert token == XContentParser.Token.FIELD_NAME;
|
||||
String queryName = parser.currentName();
|
||||
// move to the next START_OBJECT
|
||||
token = jp.nextToken();
|
||||
assert token == JsonToken.START_OBJECT;
|
||||
token = parser.nextToken();
|
||||
assert token == XContentParser.Token.START_OBJECT;
|
||||
|
||||
JsonFilterParser filterParser = queryParserRegistry.filterParser(queryName);
|
||||
XContentFilterParser filterParser = queryParserRegistry.filterParser(queryName);
|
||||
if (filterParser == null) {
|
||||
throw new QueryParsingException(index, "No json query parser registered for [" + queryName + "]");
|
||||
throw new QueryParsingException(index, "No query parser registered for [" + queryName + "]");
|
||||
}
|
||||
Filter result = filterParser.parse(this);
|
||||
if (jp.getCurrentToken() == JsonToken.END_OBJECT) {
|
||||
if (parser.currentToken() == XContentParser.Token.END_OBJECT) {
|
||||
// if we are at END_OBJECT, move to the next one...
|
||||
jp.nextToken();
|
||||
parser.nextToken();
|
||||
}
|
||||
return result;
|
||||
}
|
@ -17,10 +17,10 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.json.JsonBuilder;
|
||||
import org.elasticsearch.util.trove.ExtTObjectFloatHashMap;
|
||||
import org.elasticsearch.util.xcontent.builder.XContentBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
@ -36,7 +36,7 @@ import static org.elasticsearch.util.gcommon.collect.Lists.*;
|
||||
*
|
||||
* @author kimchy (shay.baon)
|
||||
*/
|
||||
public class QueryStringJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
public class QueryStringQueryBuilder extends BaseQueryBuilder {
|
||||
|
||||
public static enum Operator {
|
||||
OR,
|
||||
@ -73,7 +73,7 @@ public class QueryStringJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
|
||||
private float tieBreaker = -1;
|
||||
|
||||
public QueryStringJsonQueryBuilder(String queryString) {
|
||||
public QueryStringQueryBuilder(String queryString) {
|
||||
this.queryString = queryString;
|
||||
}
|
||||
|
||||
@ -81,7 +81,7 @@ public class QueryStringJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* The default field to run against when no prefix field is specified. Only relevant when
|
||||
* not explicitly adding fields the query string will run against.
|
||||
*/
|
||||
public QueryStringJsonQueryBuilder defaultField(String defaultField) {
|
||||
public QueryStringQueryBuilder defaultField(String defaultField) {
|
||||
this.defaultField = defaultField;
|
||||
return this;
|
||||
}
|
||||
@ -89,7 +89,7 @@ public class QueryStringJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* Adds a field to run the query string against.
|
||||
*/
|
||||
public QueryStringJsonQueryBuilder field(String field) {
|
||||
public QueryStringQueryBuilder field(String field) {
|
||||
if (fields == null) {
|
||||
fields = newArrayList();
|
||||
}
|
||||
@ -100,7 +100,7 @@ public class QueryStringJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* Adds a field to run the query string against with a specific boost.
|
||||
*/
|
||||
public QueryStringJsonQueryBuilder field(String field, float boost) {
|
||||
public QueryStringQueryBuilder field(String field, float boost) {
|
||||
if (fields == null) {
|
||||
fields = newArrayList();
|
||||
}
|
||||
@ -116,7 +116,7 @@ public class QueryStringJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* When more than one field is used with the query string, should queries be combined using
|
||||
* dis max, or boolean query. Defaults to dis max (<tt>true</tt>).
|
||||
*/
|
||||
public QueryStringJsonQueryBuilder useDisMax(boolean useDisMax) {
|
||||
public QueryStringQueryBuilder useDisMax(boolean useDisMax) {
|
||||
this.useDisMax = useDisMax;
|
||||
return this;
|
||||
}
|
||||
@ -125,7 +125,7 @@ public class QueryStringJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* When more than one field is used with the query string, and combined queries are using
|
||||
* dis max, control the tie breaker for it.
|
||||
*/
|
||||
public QueryStringJsonQueryBuilder tieBreaker(float tieBreaker) {
|
||||
public QueryStringQueryBuilder tieBreaker(float tieBreaker) {
|
||||
this.tieBreaker = tieBreaker;
|
||||
return this;
|
||||
}
|
||||
@ -133,14 +133,14 @@ public class QueryStringJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* Sets the boolean operator of the query parser used to parse the query string.
|
||||
*
|
||||
* <p>In default mode ({@link FieldJsonQueryBuilder.Operator#OR}) terms without any modifiers
|
||||
* <p>In default mode ({@link FieldQueryBuilder.Operator#OR}) terms without any modifiers
|
||||
* are considered optional: for example <code>capital of Hungary</code> is equal to
|
||||
* <code>capital OR of OR Hungary</code>.
|
||||
*
|
||||
* <p>In {@link FieldJsonQueryBuilder.Operator#AND} mode terms are considered to be in conjunction: the
|
||||
* <p>In {@link FieldQueryBuilder.Operator#AND} mode terms are considered to be in conjunction: the
|
||||
* above mentioned query is parsed as <code>capital AND of AND Hungary</code>
|
||||
*/
|
||||
public QueryStringJsonQueryBuilder defaultOperator(Operator defaultOperator) {
|
||||
public QueryStringQueryBuilder defaultOperator(Operator defaultOperator) {
|
||||
this.defaultOperator = defaultOperator;
|
||||
return this;
|
||||
}
|
||||
@ -149,7 +149,7 @@ public class QueryStringJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* The optional analyzer used to analyze the query string. Note, if a field has search analyzer
|
||||
* defined for it, then it will be used automatically. Defaults to the smart search analyzer.
|
||||
*/
|
||||
public QueryStringJsonQueryBuilder analyzer(String analyzer) {
|
||||
public QueryStringQueryBuilder analyzer(String analyzer) {
|
||||
this.analyzer = analyzer;
|
||||
return this;
|
||||
}
|
||||
@ -157,7 +157,7 @@ public class QueryStringJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* Should leading wildcards be allowed or not. Defaults to <tt>true</tt>.
|
||||
*/
|
||||
public QueryStringJsonQueryBuilder allowLeadingWildcard(boolean allowLeadingWildcard) {
|
||||
public QueryStringQueryBuilder allowLeadingWildcard(boolean allowLeadingWildcard) {
|
||||
this.allowLeadingWildcard = allowLeadingWildcard;
|
||||
return this;
|
||||
}
|
||||
@ -166,7 +166,7 @@ public class QueryStringJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* Whether terms of wildcard, prefix, fuzzy and range queries are to be automatically
|
||||
* lower-cased or not. Default is <tt>true</tt>.
|
||||
*/
|
||||
public QueryStringJsonQueryBuilder lowercaseExpandedTerms(boolean lowercaseExpandedTerms) {
|
||||
public QueryStringQueryBuilder lowercaseExpandedTerms(boolean lowercaseExpandedTerms) {
|
||||
this.lowercaseExpandedTerms = lowercaseExpandedTerms;
|
||||
return this;
|
||||
}
|
||||
@ -178,7 +178,7 @@ public class QueryStringJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* <p>When set, result phrase and multi-phrase queries will be aware of position increments.
|
||||
* Useful when e.g. a StopFilter increases the position increment of the token that follows an omitted token.
|
||||
*/
|
||||
public QueryStringJsonQueryBuilder enablePositionIncrements(boolean enablePositionIncrements) {
|
||||
public QueryStringQueryBuilder enablePositionIncrements(boolean enablePositionIncrements) {
|
||||
this.enablePositionIncrements = enablePositionIncrements;
|
||||
return this;
|
||||
}
|
||||
@ -186,7 +186,7 @@ public class QueryStringJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* Set the minimum similarity for fuzzy queries. Default is 0.5f.
|
||||
*/
|
||||
public QueryStringJsonQueryBuilder fuzzyMinSim(float fuzzyMinSim) {
|
||||
public QueryStringQueryBuilder fuzzyMinSim(float fuzzyMinSim) {
|
||||
this.fuzzyMinSim = fuzzyMinSim;
|
||||
return this;
|
||||
}
|
||||
@ -194,7 +194,7 @@ public class QueryStringJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* Set the minimum similarity for fuzzy queries. Default is 0.5f.
|
||||
*/
|
||||
public QueryStringJsonQueryBuilder fuzzyPrefixLength(int fuzzyPrefixLength) {
|
||||
public QueryStringQueryBuilder fuzzyPrefixLength(int fuzzyPrefixLength) {
|
||||
this.fuzzyPrefixLength = fuzzyPrefixLength;
|
||||
return this;
|
||||
}
|
||||
@ -203,7 +203,7 @@ public class QueryStringJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* Sets the default slop for phrases. If zero, then exact phrase matches
|
||||
* are required. Default value is zero.
|
||||
*/
|
||||
public QueryStringJsonQueryBuilder phraseSlop(int phraseSlop) {
|
||||
public QueryStringQueryBuilder phraseSlop(int phraseSlop) {
|
||||
this.phraseSlop = phraseSlop;
|
||||
return this;
|
||||
}
|
||||
@ -212,13 +212,13 @@ public class QueryStringJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* Sets the boost for this query. Documents matching this query will (in addition to the normal
|
||||
* weightings) have their score multiplied by the boost provided.
|
||||
*/
|
||||
public QueryStringJsonQueryBuilder boost(float boost) {
|
||||
public QueryStringQueryBuilder boost(float boost) {
|
||||
this.boost = boost;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override protected void doJson(JsonBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(QueryStringJsonQueryParser.NAME);
|
||||
@Override protected void doXContent(XContentBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(QueryStringQueryParser.NAME);
|
||||
builder.field("query", queryString);
|
||||
if (defaultField != null) {
|
||||
builder.field("default_field", defaultField);
|
@ -17,17 +17,13 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.gcommon.collect.Lists;
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.apache.lucene.analysis.Analyzer;
|
||||
import org.apache.lucene.queryParser.ParseException;
|
||||
import org.apache.lucene.queryParser.QueryParser;
|
||||
import org.apache.lucene.search.FuzzyQuery;
|
||||
import org.apache.lucene.search.Query;
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.codehaus.jackson.JsonToken;
|
||||
import org.elasticsearch.index.AbstractIndexComponent;
|
||||
import org.elasticsearch.index.Index;
|
||||
import org.elasticsearch.index.analysis.AnalysisService;
|
||||
@ -36,10 +32,12 @@ import org.elasticsearch.index.query.QueryParsingException;
|
||||
import org.elasticsearch.index.query.support.MapperQueryParser;
|
||||
import org.elasticsearch.index.query.support.MultiFieldMapperQueryParser;
|
||||
import org.elasticsearch.index.settings.IndexSettings;
|
||||
import org.elasticsearch.util.Booleans;
|
||||
import org.elasticsearch.util.Strings;
|
||||
import org.elasticsearch.util.gcommon.collect.Lists;
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.elasticsearch.util.settings.Settings;
|
||||
import org.elasticsearch.util.trove.ExtTObjectFloatHashMap;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
@ -49,13 +47,13 @@ import static org.elasticsearch.util.lucene.search.Queries.*;
|
||||
/**
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class QueryStringJsonQueryParser extends AbstractIndexComponent implements JsonQueryParser {
|
||||
public class QueryStringQueryParser extends AbstractIndexComponent implements XContentQueryParser {
|
||||
|
||||
public static final String NAME = "query_string";
|
||||
|
||||
private final AnalysisService analysisService;
|
||||
|
||||
@Inject public QueryStringJsonQueryParser(Index index, @IndexSettings Settings settings, AnalysisService analysisService) {
|
||||
@Inject public QueryStringQueryParser(Index index, @IndexSettings Settings settings, AnalysisService analysisService) {
|
||||
super(index, settings);
|
||||
this.analysisService = analysisService;
|
||||
}
|
||||
@ -64,8 +62,8 @@ public class QueryStringJsonQueryParser extends AbstractIndexComponent implement
|
||||
return new String[]{NAME, Strings.toCamelCase(NAME)};
|
||||
}
|
||||
|
||||
@Override public Query parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
JsonParser jp = parseContext.jp();
|
||||
@Override public Query parse(QueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
XContentParser parser = parseContext.parser();
|
||||
|
||||
// move to the field value
|
||||
|
||||
@ -87,27 +85,27 @@ public class QueryStringJsonQueryParser extends AbstractIndexComponent implement
|
||||
boolean useDisMax = true;
|
||||
|
||||
String currentFieldName = null;
|
||||
JsonToken token;
|
||||
while ((token = jp.nextToken()) != JsonToken.END_OBJECT) {
|
||||
if (token == JsonToken.FIELD_NAME) {
|
||||
currentFieldName = jp.getCurrentName();
|
||||
} else if (token == JsonToken.START_ARRAY) {
|
||||
XContentParser.Token token;
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
|
||||
if (token == XContentParser.Token.FIELD_NAME) {
|
||||
currentFieldName = parser.currentName();
|
||||
} else if (token == XContentParser.Token.START_ARRAY) {
|
||||
if ("fields".equals(currentFieldName)) {
|
||||
while ((token = jp.nextToken()) != JsonToken.END_ARRAY) {
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
|
||||
String fField = null;
|
||||
float fBoost = -1;
|
||||
char[] text = jp.getTextCharacters();
|
||||
int end = jp.getTextOffset() + jp.getTextLength();
|
||||
for (int i = jp.getTextOffset(); i < end; i++) {
|
||||
char[] text = parser.textCharacters();
|
||||
int end = parser.textOffset() + parser.textLength();
|
||||
for (int i = parser.textOffset(); i < end; i++) {
|
||||
if (text[i] == '^') {
|
||||
int relativeLocation = i - jp.getTextOffset();
|
||||
fField = new String(text, jp.getTextOffset(), relativeLocation);
|
||||
fBoost = Float.parseFloat(new String(text, i + 1, jp.getTextLength() - relativeLocation - 1));
|
||||
int relativeLocation = i - parser.textOffset();
|
||||
fField = new String(text, parser.textOffset(), relativeLocation);
|
||||
fBoost = Float.parseFloat(new String(text, i + 1, parser.textLength() - relativeLocation - 1));
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (fField == null) {
|
||||
fField = jp.getText();
|
||||
fField = parser.text();
|
||||
}
|
||||
if (fields == null) {
|
||||
fields = Lists.newArrayList();
|
||||
@ -121,13 +119,13 @@ public class QueryStringJsonQueryParser extends AbstractIndexComponent implement
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_STRING) {
|
||||
} else if (token.isValue()) {
|
||||
if ("query".equals(currentFieldName)) {
|
||||
queryString = jp.getText();
|
||||
queryString = parser.text();
|
||||
} else if ("default_field".equals(currentFieldName) || "defaultField".equals(currentFieldName)) {
|
||||
defaultField = parseContext.indexName(jp.getText());
|
||||
defaultField = parseContext.indexName(parser.text());
|
||||
} else if ("default_operator".equals(currentFieldName) || "defaultOperator".equals(currentFieldName)) {
|
||||
String op = jp.getText();
|
||||
String op = parser.text();
|
||||
if ("or".equalsIgnoreCase(op)) {
|
||||
defaultOperator = QueryParser.Operator.OR;
|
||||
} else if ("and".equalsIgnoreCase(op)) {
|
||||
@ -136,69 +134,27 @@ public class QueryStringJsonQueryParser extends AbstractIndexComponent implement
|
||||
throw new QueryParsingException(index, "Query default operator [" + op + "] is not allowed");
|
||||
}
|
||||
} else if ("analyzer".equals(currentFieldName)) {
|
||||
analyzer = analysisService.analyzer(jp.getText());
|
||||
analyzer = analysisService.analyzer(parser.text());
|
||||
} else if ("allow_leading_wildcard".equals(currentFieldName) || "allowLeadingWildcard".equals(currentFieldName)) {
|
||||
allowLeadingWildcard = Booleans.parseBoolean(jp.getText(), false);
|
||||
allowLeadingWildcard = parser.booleanValue();
|
||||
} else if ("lowercase_expanded_terms".equals(currentFieldName) || "lowercaseExpandedTerms".equals(currentFieldName)) {
|
||||
lowercaseExpandedTerms = Booleans.parseBoolean(jp.getText(), false);
|
||||
lowercaseExpandedTerms = parser.booleanValue();
|
||||
} else if ("enable_position_increments".equals(currentFieldName) || "enablePositionIncrements".equals(currentFieldName)) {
|
||||
enablePositionIncrements = Booleans.parseBoolean(jp.getText(), false);
|
||||
enablePositionIncrements = parser.booleanValue();
|
||||
} else if ("escape".equals(currentFieldName)) {
|
||||
escape = Booleans.parseBoolean(jp.getText(), false);
|
||||
escape = parser.booleanValue();
|
||||
} else if ("use_dis_max".equals(currentFieldName) || "useDisMax".equals(currentFieldName)) {
|
||||
useDisMax = Booleans.parseBoolean(jp.getText(), false);
|
||||
useDisMax = parser.booleanValue();
|
||||
} else if ("fuzzy_prefix_length".equals(currentFieldName) || "fuzzyPrefixLength".equals(currentFieldName)) {
|
||||
fuzzyPrefixLength = Integer.parseInt(jp.getText());
|
||||
fuzzyPrefixLength = parser.intValue();
|
||||
} else if ("phrase_slop".equals(currentFieldName) || "phraseSlop".equals(currentFieldName)) {
|
||||
phraseSlop = Integer.parseInt(jp.getText());
|
||||
phraseSlop = parser.intValue();
|
||||
} else if ("fuzzy_min_sim".equals(currentFieldName) || "fuzzyMinSim".equals(currentFieldName)) {
|
||||
fuzzyMinSim = Float.parseFloat(jp.getText());
|
||||
fuzzyMinSim = parser.floatValue();
|
||||
} else if ("boost".equals(currentFieldName)) {
|
||||
boost = Float.parseFloat(jp.getText());
|
||||
boost = parser.floatValue();
|
||||
} else if ("tie_breaker".equals(currentFieldName) || "tieBreaker".equals(currentFieldName)) {
|
||||
tieBreaker = Float.parseFloat(jp.getText());
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE) {
|
||||
if ("allow_leading_wildcard".equals(currentFieldName) || "allowLeadingWildcards".equals(currentFieldName)) {
|
||||
allowLeadingWildcard = token == JsonToken.VALUE_TRUE;
|
||||
} else if ("lowercase_expanded_terms".equals(currentFieldName) || "lowercaseExpandedTerms".equals(currentFieldName)) {
|
||||
lowercaseExpandedTerms = token == JsonToken.VALUE_TRUE;
|
||||
} else if ("enable_position_increments".equals(currentFieldName) || "enablePositionIncrements".equals(currentFieldName)) {
|
||||
enablePositionIncrements = token == JsonToken.VALUE_TRUE;
|
||||
} else if ("escape".equals(currentFieldName)) {
|
||||
escape = token == JsonToken.VALUE_TRUE;
|
||||
} else if ("use_dis_max".equals(currentFieldName) || "useDisMax".equals(currentFieldName)) {
|
||||
useDisMax = token == JsonToken.VALUE_TRUE;
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_NUMBER_FLOAT) {
|
||||
if ("fuzzy_min_sim".equals(currentFieldName) || "fuzzyMinSim".equals(currentFieldName)) {
|
||||
fuzzyMinSim = jp.getFloatValue();
|
||||
} else if ("boost".equals(currentFieldName)) {
|
||||
boost = jp.getFloatValue();
|
||||
} else if ("tie_breaker".equals(currentFieldName) || "tieBreaker".equals(currentFieldName)) {
|
||||
tieBreaker = jp.getFloatValue();
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_NUMBER_INT) {
|
||||
if ("fuzzy_prefix_length".equals(currentFieldName) || "fuzzyPrefixLength".equals(currentFieldName)) {
|
||||
fuzzyPrefixLength = jp.getIntValue();
|
||||
} else if ("phrase_slop".equals(currentFieldName) || "phraseSlop".equals(currentFieldName)) {
|
||||
phraseSlop = jp.getIntValue();
|
||||
} else if ("fuzzy_min_sim".equals(currentFieldName) || "fuzzyMinSim".equals(currentFieldName)) {
|
||||
fuzzyMinSim = jp.getFloatValue();
|
||||
} else if ("boost".equals(currentFieldName)) {
|
||||
boost = jp.getFloatValue();
|
||||
} else if ("allow_leading_wildcard".equals(currentFieldName) || "allowLeadingWildcard".equals(currentFieldName)) {
|
||||
allowLeadingWildcard = jp.getIntValue() != 0;
|
||||
} else if ("lowercase_expanded_terms".equals(currentFieldName) || "lowercaseExpandedTerms".equals(currentFieldName)) {
|
||||
lowercaseExpandedTerms = jp.getIntValue() != 0;
|
||||
} else if ("enable_position_increments".equals(currentFieldName) || "enablePositionIncrements".equals(currentFieldName)) {
|
||||
enablePositionIncrements = jp.getIntValue() != 0;
|
||||
} else if ("escape".equals(currentFieldName)) {
|
||||
escape = jp.getIntValue() != 0;
|
||||
} else if ("use_dis_max".equals(currentFieldName) || "useDisMax".equals(currentFieldName)) {
|
||||
useDisMax = jp.getIntValue() != 0;
|
||||
} else if ("tie_breaker".equals(currentFieldName) || "tieBreaker".equals(currentFieldName)) {
|
||||
tieBreaker = jp.getFloatValue();
|
||||
tieBreaker = parser.floatValue();
|
||||
}
|
||||
}
|
||||
}
|
@ -17,9 +17,9 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.json.JsonBuilder;
|
||||
import org.elasticsearch.util.xcontent.builder.XContentBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@ -28,7 +28,7 @@ import java.io.IOException;
|
||||
*
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class RangeJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
public class RangeFilterBuilder extends BaseFilterBuilder {
|
||||
|
||||
private final String name;
|
||||
|
||||
@ -45,14 +45,14 @@ public class RangeJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
*
|
||||
* @param name The field name
|
||||
*/
|
||||
public RangeJsonFilterBuilder(String name) {
|
||||
public RangeFilterBuilder(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
/**
|
||||
* The from part of the filter query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonFilterBuilder from(String from) {
|
||||
public RangeFilterBuilder from(String from) {
|
||||
this.from = from;
|
||||
return this;
|
||||
}
|
||||
@ -60,7 +60,7 @@ public class RangeJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
/**
|
||||
* The from part of the filter query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonFilterBuilder from(int from) {
|
||||
public RangeFilterBuilder from(int from) {
|
||||
this.from = from;
|
||||
return this;
|
||||
}
|
||||
@ -68,7 +68,7 @@ public class RangeJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
/**
|
||||
* The from part of the filter query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonFilterBuilder from(long from) {
|
||||
public RangeFilterBuilder from(long from) {
|
||||
this.from = from;
|
||||
return this;
|
||||
}
|
||||
@ -76,7 +76,7 @@ public class RangeJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
/**
|
||||
* The from part of the filter query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonFilterBuilder from(float from) {
|
||||
public RangeFilterBuilder from(float from) {
|
||||
this.from = from;
|
||||
return this;
|
||||
}
|
||||
@ -84,7 +84,7 @@ public class RangeJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
/**
|
||||
* The from part of the filter query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonFilterBuilder from(double from) {
|
||||
public RangeFilterBuilder from(double from) {
|
||||
this.from = from;
|
||||
return this;
|
||||
}
|
||||
@ -92,7 +92,7 @@ public class RangeJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
/**
|
||||
* The from part of the filter query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonFilterBuilder gt(String from) {
|
||||
public RangeFilterBuilder gt(String from) {
|
||||
this.from = from;
|
||||
this.includeLower = false;
|
||||
return this;
|
||||
@ -101,7 +101,7 @@ public class RangeJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
/**
|
||||
* The from part of the filter query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonFilterBuilder gt(int from) {
|
||||
public RangeFilterBuilder gt(int from) {
|
||||
this.from = from;
|
||||
this.includeLower = false;
|
||||
return this;
|
||||
@ -110,7 +110,7 @@ public class RangeJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
/**
|
||||
* The from part of the filter query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonFilterBuilder gt(long from) {
|
||||
public RangeFilterBuilder gt(long from) {
|
||||
this.from = from;
|
||||
this.includeLower = false;
|
||||
return this;
|
||||
@ -119,7 +119,7 @@ public class RangeJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
/**
|
||||
* The from part of the filter query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonFilterBuilder gt(float from) {
|
||||
public RangeFilterBuilder gt(float from) {
|
||||
this.from = from;
|
||||
this.includeLower = false;
|
||||
return this;
|
||||
@ -128,7 +128,7 @@ public class RangeJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
/**
|
||||
* The from part of the filter query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonFilterBuilder gt(double from) {
|
||||
public RangeFilterBuilder gt(double from) {
|
||||
this.from = from;
|
||||
this.includeLower = false;
|
||||
return this;
|
||||
@ -137,7 +137,7 @@ public class RangeJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
/**
|
||||
* The from part of the filter query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonFilterBuilder gte(String from) {
|
||||
public RangeFilterBuilder gte(String from) {
|
||||
this.from = from;
|
||||
this.includeLower = true;
|
||||
return this;
|
||||
@ -146,7 +146,7 @@ public class RangeJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
/**
|
||||
* The from part of the filter query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonFilterBuilder gte(int from) {
|
||||
public RangeFilterBuilder gte(int from) {
|
||||
this.from = from;
|
||||
this.includeLower = true;
|
||||
return this;
|
||||
@ -155,7 +155,7 @@ public class RangeJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
/**
|
||||
* The from part of the filter query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonFilterBuilder gte(long from) {
|
||||
public RangeFilterBuilder gte(long from) {
|
||||
this.from = from;
|
||||
this.includeLower = true;
|
||||
return this;
|
||||
@ -164,7 +164,7 @@ public class RangeJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
/**
|
||||
* The from part of the filter query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonFilterBuilder gte(float from) {
|
||||
public RangeFilterBuilder gte(float from) {
|
||||
this.from = from;
|
||||
this.includeLower = true;
|
||||
return this;
|
||||
@ -173,7 +173,7 @@ public class RangeJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
/**
|
||||
* The from part of the filter query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonFilterBuilder gte(double from) {
|
||||
public RangeFilterBuilder gte(double from) {
|
||||
this.from = from;
|
||||
this.includeLower = true;
|
||||
return this;
|
||||
@ -182,7 +182,7 @@ public class RangeJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
/**
|
||||
* The to part of the filter query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonFilterBuilder to(String to) {
|
||||
public RangeFilterBuilder to(String to) {
|
||||
this.to = to;
|
||||
return this;
|
||||
}
|
||||
@ -190,7 +190,7 @@ public class RangeJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
/**
|
||||
* The to part of the filter query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonFilterBuilder to(int to) {
|
||||
public RangeFilterBuilder to(int to) {
|
||||
this.to = to;
|
||||
return this;
|
||||
}
|
||||
@ -198,7 +198,7 @@ public class RangeJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
/**
|
||||
* The to part of the filter query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonFilterBuilder to(long to) {
|
||||
public RangeFilterBuilder to(long to) {
|
||||
this.to = to;
|
||||
return this;
|
||||
}
|
||||
@ -206,7 +206,7 @@ public class RangeJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
/**
|
||||
* The to part of the filter query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonFilterBuilder to(float to) {
|
||||
public RangeFilterBuilder to(float to) {
|
||||
this.to = to;
|
||||
return this;
|
||||
}
|
||||
@ -214,7 +214,7 @@ public class RangeJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
/**
|
||||
* The to part of the filter query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonFilterBuilder to(double to) {
|
||||
public RangeFilterBuilder to(double to) {
|
||||
this.to = to;
|
||||
return this;
|
||||
}
|
||||
@ -222,7 +222,7 @@ public class RangeJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
/**
|
||||
* The to part of the filter query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonFilterBuilder lt(String to) {
|
||||
public RangeFilterBuilder lt(String to) {
|
||||
this.to = to;
|
||||
this.includeUpper = false;
|
||||
return this;
|
||||
@ -231,7 +231,7 @@ public class RangeJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
/**
|
||||
* The to part of the filter query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonFilterBuilder lt(int to) {
|
||||
public RangeFilterBuilder lt(int to) {
|
||||
this.to = to;
|
||||
this.includeUpper = false;
|
||||
return this;
|
||||
@ -240,7 +240,7 @@ public class RangeJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
/**
|
||||
* The to part of the filter query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonFilterBuilder lt(long to) {
|
||||
public RangeFilterBuilder lt(long to) {
|
||||
this.to = to;
|
||||
this.includeUpper = false;
|
||||
return this;
|
||||
@ -249,7 +249,7 @@ public class RangeJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
/**
|
||||
* The to part of the filter query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonFilterBuilder lt(float to) {
|
||||
public RangeFilterBuilder lt(float to) {
|
||||
this.to = to;
|
||||
this.includeUpper = false;
|
||||
return this;
|
||||
@ -258,7 +258,7 @@ public class RangeJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
/**
|
||||
* The to part of the filter query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonFilterBuilder lt(double to) {
|
||||
public RangeFilterBuilder lt(double to) {
|
||||
this.to = to;
|
||||
this.includeUpper = false;
|
||||
return this;
|
||||
@ -267,7 +267,7 @@ public class RangeJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
/**
|
||||
* The to part of the filter query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonFilterBuilder lte(String to) {
|
||||
public RangeFilterBuilder lte(String to) {
|
||||
this.to = to;
|
||||
this.includeUpper = true;
|
||||
return this;
|
||||
@ -276,7 +276,7 @@ public class RangeJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
/**
|
||||
* The to part of the filter query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonFilterBuilder lte(int to) {
|
||||
public RangeFilterBuilder lte(int to) {
|
||||
this.to = to;
|
||||
this.includeUpper = true;
|
||||
return this;
|
||||
@ -285,7 +285,7 @@ public class RangeJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
/**
|
||||
* The to part of the filter query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonFilterBuilder lte(long to) {
|
||||
public RangeFilterBuilder lte(long to) {
|
||||
this.to = to;
|
||||
this.includeUpper = true;
|
||||
return this;
|
||||
@ -294,7 +294,7 @@ public class RangeJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
/**
|
||||
* The to part of the filter query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonFilterBuilder lte(float to) {
|
||||
public RangeFilterBuilder lte(float to) {
|
||||
this.to = to;
|
||||
this.includeUpper = true;
|
||||
return this;
|
||||
@ -303,7 +303,7 @@ public class RangeJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
/**
|
||||
* The to part of the filter query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonFilterBuilder lte(double to) {
|
||||
public RangeFilterBuilder lte(double to) {
|
||||
this.to = to;
|
||||
this.includeUpper = true;
|
||||
return this;
|
||||
@ -312,7 +312,7 @@ public class RangeJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
/**
|
||||
* Should the lower bound be included or not. Defaults to <tt>true</tt>.
|
||||
*/
|
||||
public RangeJsonFilterBuilder includeLower(boolean includeLower) {
|
||||
public RangeFilterBuilder includeLower(boolean includeLower) {
|
||||
this.includeLower = includeLower;
|
||||
return this;
|
||||
}
|
||||
@ -320,13 +320,13 @@ public class RangeJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
/**
|
||||
* Should the upper bound be included or not. Defaults to <tt>true</tt>.
|
||||
*/
|
||||
public RangeJsonFilterBuilder includeUpper(boolean includeUpper) {
|
||||
public RangeFilterBuilder includeUpper(boolean includeUpper) {
|
||||
this.includeUpper = includeUpper;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override protected void doJson(JsonBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(RangeJsonFilterParser.NAME);
|
||||
@Override protected void doXContent(XContentBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(RangeFilterParser.NAME);
|
||||
builder.startObject(name);
|
||||
builder.field("from", from);
|
||||
builder.field("to", to);
|
@ -17,33 +17,31 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.apache.lucene.search.Filter;
|
||||
import org.apache.lucene.search.TermRangeFilter;
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.codehaus.jackson.JsonToken;
|
||||
import org.elasticsearch.index.AbstractIndexComponent;
|
||||
import org.elasticsearch.index.Index;
|
||||
import org.elasticsearch.index.mapper.MapperService;
|
||||
import org.elasticsearch.index.query.QueryParsingException;
|
||||
import org.elasticsearch.index.settings.IndexSettings;
|
||||
import org.elasticsearch.util.Booleans;
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.elasticsearch.util.settings.Settings;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import static org.elasticsearch.index.query.support.QueryParsers.*;
|
||||
|
||||
/**
|
||||
* @author kimchy (Shay Banon)
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class RangeJsonFilterParser extends AbstractIndexComponent implements JsonFilterParser {
|
||||
public class RangeFilterParser extends AbstractIndexComponent implements XContentFilterParser {
|
||||
|
||||
public static final String NAME = "range";
|
||||
|
||||
@Inject public RangeJsonFilterParser(Index index, @IndexSettings Settings settings) {
|
||||
@Inject public RangeFilterParser(Index index, @IndexSettings Settings settings) {
|
||||
super(index, settings);
|
||||
}
|
||||
|
||||
@ -51,16 +49,16 @@ public class RangeJsonFilterParser extends AbstractIndexComponent implements Jso
|
||||
return new String[]{NAME};
|
||||
}
|
||||
|
||||
@Override public Filter parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
JsonParser jp = parseContext.jp();
|
||||
@Override public Filter parse(QueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
XContentParser parser = parseContext.parser();
|
||||
|
||||
JsonToken token = jp.nextToken();
|
||||
assert token == JsonToken.FIELD_NAME;
|
||||
String fieldName = jp.getCurrentName();
|
||||
XContentParser.Token token = parser.nextToken();
|
||||
assert token == XContentParser.Token.FIELD_NAME;
|
||||
String fieldName = parser.currentName();
|
||||
|
||||
// now, we move after the field name, which starts the object
|
||||
token = jp.nextToken();
|
||||
assert token == JsonToken.START_OBJECT;
|
||||
token = parser.nextToken();
|
||||
assert token == XContentParser.Token.START_OBJECT;
|
||||
|
||||
String from = null;
|
||||
String to = null;
|
||||
@ -68,73 +66,37 @@ public class RangeJsonFilterParser extends AbstractIndexComponent implements Jso
|
||||
boolean includeUpper = true;
|
||||
|
||||
String currentFieldName = null;
|
||||
while ((token = jp.nextToken()) != JsonToken.END_OBJECT) {
|
||||
if (token == JsonToken.FIELD_NAME) {
|
||||
currentFieldName = jp.getCurrentName();
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
|
||||
if (token == XContentParser.Token.FIELD_NAME) {
|
||||
currentFieldName = parser.currentName();
|
||||
} else {
|
||||
if ("from".equals(currentFieldName)) {
|
||||
if (jp.getCurrentToken() == JsonToken.VALUE_NULL) {
|
||||
from = null;
|
||||
} else {
|
||||
from = jp.getText();
|
||||
}
|
||||
from = parser.textOrNull();
|
||||
} else if ("to".equals(currentFieldName)) {
|
||||
if (jp.getCurrentToken() == JsonToken.VALUE_NULL) {
|
||||
to = null;
|
||||
} else {
|
||||
to = jp.getText();
|
||||
}
|
||||
to = parser.textOrNull();
|
||||
} else if ("include_lower".equals(currentFieldName) || "includeLower".equals(currentFieldName)) {
|
||||
if (token == JsonToken.VALUE_NUMBER_INT) {
|
||||
includeLower = jp.getIntValue() != 0;
|
||||
} else if (token == JsonToken.VALUE_STRING) {
|
||||
includeLower = Booleans.parseBoolean(jp.getText(), includeLower);
|
||||
} else {
|
||||
includeLower = token == JsonToken.VALUE_TRUE;
|
||||
}
|
||||
includeLower = parser.booleanValue();
|
||||
} else if ("include_upper".equals(currentFieldName) || "includeUpper".equals(currentFieldName)) {
|
||||
if (token == JsonToken.VALUE_NUMBER_INT) {
|
||||
includeUpper = jp.getIntValue() != 0;
|
||||
} else if (token == JsonToken.VALUE_STRING) {
|
||||
includeUpper = Booleans.parseBoolean(jp.getText(), includeUpper);
|
||||
} else {
|
||||
includeUpper = token == JsonToken.VALUE_TRUE;
|
||||
}
|
||||
includeUpper = parser.booleanValue();
|
||||
} else if ("gt".equals(currentFieldName)) {
|
||||
if (jp.getCurrentToken() == JsonToken.VALUE_NULL) {
|
||||
from = null;
|
||||
} else {
|
||||
from = jp.getText();
|
||||
}
|
||||
from = parser.textOrNull();
|
||||
includeLower = false;
|
||||
} else if ("gte".equals(currentFieldName) || "ge".equals(currentFieldName)) {
|
||||
if (jp.getCurrentToken() == JsonToken.VALUE_NULL) {
|
||||
from = null;
|
||||
} else {
|
||||
from = jp.getText();
|
||||
}
|
||||
from = parser.textOrNull();
|
||||
includeLower = true;
|
||||
} else if ("lt".equals(currentFieldName)) {
|
||||
if (jp.getCurrentToken() == JsonToken.VALUE_NULL) {
|
||||
to = null;
|
||||
} else {
|
||||
to = jp.getText();
|
||||
}
|
||||
to = parser.textOrNull();
|
||||
includeUpper = false;
|
||||
} else if ("lte".equals(currentFieldName) || "le".equals(currentFieldName)) {
|
||||
if (jp.getCurrentToken() == JsonToken.VALUE_NULL) {
|
||||
to = null;
|
||||
} else {
|
||||
to = jp.getText();
|
||||
}
|
||||
to = parser.textOrNull();
|
||||
includeUpper = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// move to the next end object, to close the field name
|
||||
token = jp.nextToken();
|
||||
assert token == JsonToken.END_OBJECT;
|
||||
token = parser.nextToken();
|
||||
assert token == XContentParser.Token.END_OBJECT;
|
||||
|
||||
Filter filter = null;
|
||||
MapperService.SmartNameFieldMappers smartNameFieldMappers = parseContext.smartFieldMappers(fieldName);
|
@ -17,9 +17,9 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.json.JsonBuilder;
|
||||
import org.elasticsearch.util.xcontent.builder.XContentBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@ -28,7 +28,7 @@ import java.io.IOException;
|
||||
*
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
public class RangeQueryBuilder extends BaseQueryBuilder {
|
||||
|
||||
private final String name;
|
||||
|
||||
@ -47,14 +47,14 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
*
|
||||
* @param name The field name
|
||||
*/
|
||||
public RangeJsonQueryBuilder(String name) {
|
||||
public RangeQueryBuilder(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
/**
|
||||
* The from part of the range query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonQueryBuilder from(Object from) {
|
||||
public RangeQueryBuilder from(Object from) {
|
||||
this.from = from;
|
||||
return this;
|
||||
}
|
||||
@ -62,7 +62,7 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* The from part of the range query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonQueryBuilder from(String from) {
|
||||
public RangeQueryBuilder from(String from) {
|
||||
this.from = from;
|
||||
return this;
|
||||
}
|
||||
@ -70,7 +70,7 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* The from part of the range query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonQueryBuilder from(int from) {
|
||||
public RangeQueryBuilder from(int from) {
|
||||
this.from = from;
|
||||
return this;
|
||||
}
|
||||
@ -78,7 +78,7 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* The from part of the range query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonQueryBuilder from(long from) {
|
||||
public RangeQueryBuilder from(long from) {
|
||||
this.from = from;
|
||||
return this;
|
||||
}
|
||||
@ -86,7 +86,7 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* The from part of the range query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonQueryBuilder from(float from) {
|
||||
public RangeQueryBuilder from(float from) {
|
||||
this.from = from;
|
||||
return this;
|
||||
}
|
||||
@ -94,7 +94,7 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* The from part of the range query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonQueryBuilder from(double from) {
|
||||
public RangeQueryBuilder from(double from) {
|
||||
this.from = from;
|
||||
return this;
|
||||
}
|
||||
@ -102,7 +102,7 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* The from part of the range query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonQueryBuilder gt(String from) {
|
||||
public RangeQueryBuilder gt(String from) {
|
||||
this.from = from;
|
||||
this.includeLower = false;
|
||||
return this;
|
||||
@ -111,7 +111,7 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* The from part of the range query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonQueryBuilder gt(Object from) {
|
||||
public RangeQueryBuilder gt(Object from) {
|
||||
this.from = from;
|
||||
this.includeLower = false;
|
||||
return this;
|
||||
@ -120,7 +120,7 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* The from part of the range query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonQueryBuilder gt(int from) {
|
||||
public RangeQueryBuilder gt(int from) {
|
||||
this.from = from;
|
||||
this.includeLower = false;
|
||||
return this;
|
||||
@ -129,7 +129,7 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* The from part of the range query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonQueryBuilder gt(long from) {
|
||||
public RangeQueryBuilder gt(long from) {
|
||||
this.from = from;
|
||||
this.includeLower = false;
|
||||
return this;
|
||||
@ -138,7 +138,7 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* The from part of the range query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonQueryBuilder gt(float from) {
|
||||
public RangeQueryBuilder gt(float from) {
|
||||
this.from = from;
|
||||
this.includeLower = false;
|
||||
return this;
|
||||
@ -147,7 +147,7 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* The from part of the range query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonQueryBuilder gt(double from) {
|
||||
public RangeQueryBuilder gt(double from) {
|
||||
this.from = from;
|
||||
this.includeLower = false;
|
||||
return this;
|
||||
@ -156,7 +156,7 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* The from part of the range query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonQueryBuilder gte(String from) {
|
||||
public RangeQueryBuilder gte(String from) {
|
||||
this.from = from;
|
||||
this.includeLower = true;
|
||||
return this;
|
||||
@ -165,7 +165,7 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* The from part of the range query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonQueryBuilder gte(Object from) {
|
||||
public RangeQueryBuilder gte(Object from) {
|
||||
this.from = from;
|
||||
this.includeLower = true;
|
||||
return this;
|
||||
@ -174,7 +174,7 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* The from part of the range query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonQueryBuilder gte(int from) {
|
||||
public RangeQueryBuilder gte(int from) {
|
||||
this.from = from;
|
||||
this.includeLower = true;
|
||||
return this;
|
||||
@ -183,7 +183,7 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* The from part of the range query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonQueryBuilder gte(long from) {
|
||||
public RangeQueryBuilder gte(long from) {
|
||||
this.from = from;
|
||||
this.includeLower = true;
|
||||
return this;
|
||||
@ -192,7 +192,7 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* The from part of the range query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonQueryBuilder gte(float from) {
|
||||
public RangeQueryBuilder gte(float from) {
|
||||
this.from = from;
|
||||
this.includeLower = true;
|
||||
return this;
|
||||
@ -201,7 +201,7 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* The from part of the range query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonQueryBuilder gte(double from) {
|
||||
public RangeQueryBuilder gte(double from) {
|
||||
this.from = from;
|
||||
this.includeLower = true;
|
||||
return this;
|
||||
@ -210,7 +210,7 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* The to part of the range query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonQueryBuilder to(Object to) {
|
||||
public RangeQueryBuilder to(Object to) {
|
||||
this.to = to;
|
||||
return this;
|
||||
}
|
||||
@ -218,7 +218,7 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* The to part of the range query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonQueryBuilder to(String to) {
|
||||
public RangeQueryBuilder to(String to) {
|
||||
this.to = to;
|
||||
return this;
|
||||
}
|
||||
@ -226,7 +226,7 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* The to part of the range query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonQueryBuilder to(int to) {
|
||||
public RangeQueryBuilder to(int to) {
|
||||
this.to = to;
|
||||
return this;
|
||||
}
|
||||
@ -234,7 +234,7 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* The to part of the range query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonQueryBuilder to(long to) {
|
||||
public RangeQueryBuilder to(long to) {
|
||||
this.to = to;
|
||||
return this;
|
||||
}
|
||||
@ -242,7 +242,7 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* The to part of the range query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonQueryBuilder to(float to) {
|
||||
public RangeQueryBuilder to(float to) {
|
||||
this.to = to;
|
||||
return this;
|
||||
}
|
||||
@ -250,7 +250,7 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* The to part of the range query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonQueryBuilder to(double to) {
|
||||
public RangeQueryBuilder to(double to) {
|
||||
this.to = to;
|
||||
return this;
|
||||
}
|
||||
@ -258,7 +258,7 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* The to part of the range query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonQueryBuilder lt(String to) {
|
||||
public RangeQueryBuilder lt(String to) {
|
||||
this.to = to;
|
||||
this.includeUpper = false;
|
||||
return this;
|
||||
@ -267,7 +267,7 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* The to part of the range query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonQueryBuilder lt(Object to) {
|
||||
public RangeQueryBuilder lt(Object to) {
|
||||
this.to = to;
|
||||
this.includeUpper = false;
|
||||
return this;
|
||||
@ -276,7 +276,7 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* The to part of the range query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonQueryBuilder lt(int to) {
|
||||
public RangeQueryBuilder lt(int to) {
|
||||
this.to = to;
|
||||
this.includeUpper = false;
|
||||
return this;
|
||||
@ -285,7 +285,7 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* The to part of the range query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonQueryBuilder lt(long to) {
|
||||
public RangeQueryBuilder lt(long to) {
|
||||
this.to = to;
|
||||
this.includeUpper = false;
|
||||
return this;
|
||||
@ -294,7 +294,7 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* The to part of the range query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonQueryBuilder lt(float to) {
|
||||
public RangeQueryBuilder lt(float to) {
|
||||
this.to = to;
|
||||
this.includeUpper = false;
|
||||
return this;
|
||||
@ -303,7 +303,7 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* The to part of the range query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonQueryBuilder lt(double to) {
|
||||
public RangeQueryBuilder lt(double to) {
|
||||
this.to = to;
|
||||
this.includeUpper = false;
|
||||
return this;
|
||||
@ -312,7 +312,7 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* The to part of the range query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonQueryBuilder lte(String to) {
|
||||
public RangeQueryBuilder lte(String to) {
|
||||
this.to = to;
|
||||
this.includeUpper = true;
|
||||
return this;
|
||||
@ -321,7 +321,7 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* The to part of the range query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonQueryBuilder lte(Object to) {
|
||||
public RangeQueryBuilder lte(Object to) {
|
||||
this.to = to;
|
||||
this.includeUpper = true;
|
||||
return this;
|
||||
@ -330,7 +330,7 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* The to part of the range query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonQueryBuilder lte(int to) {
|
||||
public RangeQueryBuilder lte(int to) {
|
||||
this.to = to;
|
||||
this.includeUpper = true;
|
||||
return this;
|
||||
@ -339,7 +339,7 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* The to part of the range query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonQueryBuilder lte(long to) {
|
||||
public RangeQueryBuilder lte(long to) {
|
||||
this.to = to;
|
||||
this.includeUpper = true;
|
||||
return this;
|
||||
@ -348,7 +348,7 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* The to part of the range query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonQueryBuilder lte(float to) {
|
||||
public RangeQueryBuilder lte(float to) {
|
||||
this.to = to;
|
||||
this.includeUpper = true;
|
||||
return this;
|
||||
@ -357,7 +357,7 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* The to part of the range query. Null indicates unbounded.
|
||||
*/
|
||||
public RangeJsonQueryBuilder lte(double to) {
|
||||
public RangeQueryBuilder lte(double to) {
|
||||
this.to = to;
|
||||
this.includeUpper = true;
|
||||
return this;
|
||||
@ -366,7 +366,7 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* Should the lower bound be included or not. Defaults to <tt>true</tt>.
|
||||
*/
|
||||
public RangeJsonQueryBuilder includeLower(boolean includeLower) {
|
||||
public RangeQueryBuilder includeLower(boolean includeLower) {
|
||||
this.includeLower = includeLower;
|
||||
return this;
|
||||
}
|
||||
@ -374,7 +374,7 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
/**
|
||||
* Should the upper bound be included or not. Defaults to <tt>true</tt>.
|
||||
*/
|
||||
public RangeJsonQueryBuilder includeUpper(boolean includeUpper) {
|
||||
public RangeQueryBuilder includeUpper(boolean includeUpper) {
|
||||
this.includeUpper = includeUpper;
|
||||
return this;
|
||||
}
|
||||
@ -383,13 +383,13 @@ public class RangeJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* Sets the boost for this query. Documents matching this query will (in addition to the normal
|
||||
* weightings) have their score multiplied by the boost provided.
|
||||
*/
|
||||
public RangeJsonQueryBuilder boost(float boost) {
|
||||
public RangeQueryBuilder boost(float boost) {
|
||||
this.boost = boost;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override protected void doJson(JsonBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(RangeJsonQueryParser.NAME);
|
||||
@Override protected void doXContent(XContentBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(RangeQueryParser.NAME);
|
||||
builder.startObject(name);
|
||||
builder.field("from", from);
|
||||
builder.field("to", to);
|
@ -17,20 +17,18 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.apache.lucene.search.Query;
|
||||
import org.apache.lucene.search.TermRangeQuery;
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.codehaus.jackson.JsonToken;
|
||||
import org.elasticsearch.index.AbstractIndexComponent;
|
||||
import org.elasticsearch.index.Index;
|
||||
import org.elasticsearch.index.mapper.MapperService;
|
||||
import org.elasticsearch.index.query.QueryParsingException;
|
||||
import org.elasticsearch.index.settings.IndexSettings;
|
||||
import org.elasticsearch.util.Booleans;
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.elasticsearch.util.settings.Settings;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@ -39,11 +37,11 @@ import static org.elasticsearch.index.query.support.QueryParsers.*;
|
||||
/**
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class RangeJsonQueryParser extends AbstractIndexComponent implements JsonQueryParser {
|
||||
public class RangeQueryParser extends AbstractIndexComponent implements XContentQueryParser {
|
||||
|
||||
public static final String NAME = "range";
|
||||
|
||||
@Inject public RangeJsonQueryParser(Index index, @IndexSettings Settings settings) {
|
||||
@Inject public RangeQueryParser(Index index, @IndexSettings Settings settings) {
|
||||
super(index, settings);
|
||||
}
|
||||
|
||||
@ -51,12 +49,12 @@ public class RangeJsonQueryParser extends AbstractIndexComponent implements Json
|
||||
return new String[]{NAME};
|
||||
}
|
||||
|
||||
@Override public Query parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
JsonParser jp = parseContext.jp();
|
||||
@Override public Query parse(QueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
XContentParser parser = parseContext.parser();
|
||||
|
||||
JsonToken token = jp.nextToken();
|
||||
assert token == JsonToken.FIELD_NAME;
|
||||
String fieldName = jp.getCurrentName();
|
||||
XContentParser.Token token = parser.nextToken();
|
||||
assert token == XContentParser.Token.FIELD_NAME;
|
||||
String fieldName = parser.currentName();
|
||||
|
||||
String from = null;
|
||||
String to = null;
|
||||
@ -65,79 +63,39 @@ public class RangeJsonQueryParser extends AbstractIndexComponent implements Json
|
||||
float boost = 1.0f;
|
||||
|
||||
String currentFieldName = null;
|
||||
while ((token = jp.nextToken()) != JsonToken.END_OBJECT) {
|
||||
if (token == JsonToken.FIELD_NAME) {
|
||||
currentFieldName = jp.getCurrentName();
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
|
||||
if (token == XContentParser.Token.FIELD_NAME) {
|
||||
currentFieldName = parser.currentName();
|
||||
} else {
|
||||
if ("from".equals(currentFieldName)) {
|
||||
if (jp.getCurrentToken() == JsonToken.VALUE_NULL) {
|
||||
from = null;
|
||||
} else {
|
||||
from = jp.getText();
|
||||
}
|
||||
from = parser.textOrNull();
|
||||
} else if ("to".equals(currentFieldName)) {
|
||||
if (jp.getCurrentToken() == JsonToken.VALUE_NULL) {
|
||||
to = null;
|
||||
} else {
|
||||
to = jp.getText();
|
||||
}
|
||||
to = parser.textOrNull();
|
||||
} else if ("include_lower".equals(currentFieldName) || "includeLower".equals(currentFieldName)) {
|
||||
if (token == JsonToken.VALUE_NUMBER_INT) {
|
||||
includeLower = jp.getIntValue() != 0;
|
||||
} else if (token == JsonToken.VALUE_STRING) {
|
||||
includeLower = Booleans.parseBoolean(jp.getText(), includeLower);
|
||||
} else {
|
||||
includeLower = token == JsonToken.VALUE_TRUE;
|
||||
}
|
||||
includeLower = parser.booleanValue();
|
||||
} else if ("include_upper".equals(currentFieldName) || "includeUpper".equals(currentFieldName)) {
|
||||
if (token == JsonToken.VALUE_NUMBER_INT) {
|
||||
includeUpper = jp.getIntValue() != 0;
|
||||
} else if (token == JsonToken.VALUE_STRING) {
|
||||
includeUpper = Booleans.parseBoolean(jp.getText(), includeUpper);
|
||||
} else {
|
||||
includeUpper = token == JsonToken.VALUE_TRUE;
|
||||
}
|
||||
includeUpper = parser.booleanValue();
|
||||
} else if ("boost".equals(currentFieldName)) {
|
||||
if (token == JsonToken.VALUE_STRING) {
|
||||
boost = Float.parseFloat(jp.getText());
|
||||
} else {
|
||||
boost = jp.getFloatValue();
|
||||
}
|
||||
boost = parser.floatValue();
|
||||
} else if ("gt".equals(currentFieldName)) {
|
||||
if (jp.getCurrentToken() == JsonToken.VALUE_NULL) {
|
||||
from = null;
|
||||
} else {
|
||||
from = jp.getText();
|
||||
}
|
||||
from = parser.textOrNull();
|
||||
includeLower = false;
|
||||
} else if ("gte".equals(currentFieldName) || "ge".equals(currentFieldName)) {
|
||||
if (jp.getCurrentToken() == JsonToken.VALUE_NULL) {
|
||||
from = null;
|
||||
} else {
|
||||
from = jp.getText();
|
||||
}
|
||||
from = parser.textOrNull();
|
||||
includeLower = true;
|
||||
} else if ("lt".equals(currentFieldName)) {
|
||||
if (jp.getCurrentToken() == JsonToken.VALUE_NULL) {
|
||||
to = null;
|
||||
} else {
|
||||
to = jp.getText();
|
||||
}
|
||||
to = parser.textOrNull();
|
||||
includeUpper = false;
|
||||
} else if ("lte".equals(currentFieldName) || "le".equals(currentFieldName)) {
|
||||
if (jp.getCurrentToken() == JsonToken.VALUE_NULL) {
|
||||
to = null;
|
||||
} else {
|
||||
to = jp.getText();
|
||||
}
|
||||
to = parser.textOrNull();
|
||||
includeUpper = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// move to the next end object, to close the field name
|
||||
token = jp.nextToken();
|
||||
assert token == JsonToken.END_OBJECT;
|
||||
token = parser.nextToken();
|
||||
assert token == XContentParser.Token.END_OBJECT;
|
||||
|
||||
Query query = null;
|
||||
MapperService.SmartNameFieldMappers smartNameFieldMappers = parseContext.smartFieldMappers(fieldName);
|
@ -17,37 +17,37 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.json.JsonBuilder;
|
||||
import org.elasticsearch.util.xcontent.builder.XContentBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* @author kimchy (Shay Banon)
|
||||
*/
|
||||
public class SpanFirstJsonQueryBuilder extends BaseJsonQueryBuilder implements JsonSpanQueryBuilder {
|
||||
public class SpanFirstQueryBuilder extends BaseQueryBuilder implements XContentSpanQueryBuilder {
|
||||
|
||||
private final JsonSpanQueryBuilder matchBuilder;
|
||||
private final XContentSpanQueryBuilder matchBuilder;
|
||||
|
||||
private final int end;
|
||||
|
||||
private float boost = -1;
|
||||
|
||||
public SpanFirstJsonQueryBuilder(JsonSpanQueryBuilder matchBuilder, int end) {
|
||||
public SpanFirstQueryBuilder(XContentSpanQueryBuilder matchBuilder, int end) {
|
||||
this.matchBuilder = matchBuilder;
|
||||
this.end = end;
|
||||
}
|
||||
|
||||
public SpanFirstJsonQueryBuilder boost(float boost) {
|
||||
public SpanFirstQueryBuilder boost(float boost) {
|
||||
this.boost = boost;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override protected void doJson(JsonBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(SpanFirstJsonQueryParser.NAME);
|
||||
@Override protected void doXContent(XContentBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(SpanFirstQueryParser.NAME);
|
||||
builder.field("match");
|
||||
matchBuilder.toJson(builder, params);
|
||||
matchBuilder.toXContent(builder, params);
|
||||
builder.field("end", end);
|
||||
if (boost != -1) {
|
||||
builder.field("boost", boost);
|
@ -17,31 +17,30 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.apache.lucene.search.Query;
|
||||
import org.apache.lucene.search.spans.SpanFirstQuery;
|
||||
import org.apache.lucene.search.spans.SpanQuery;
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.codehaus.jackson.JsonToken;
|
||||
import org.elasticsearch.index.AbstractIndexComponent;
|
||||
import org.elasticsearch.index.Index;
|
||||
import org.elasticsearch.index.query.QueryParsingException;
|
||||
import org.elasticsearch.index.settings.IndexSettings;
|
||||
import org.elasticsearch.util.Strings;
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.elasticsearch.util.settings.Settings;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* @author kimchy (Shay Banon)
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class SpanFirstJsonQueryParser extends AbstractIndexComponent implements JsonQueryParser {
|
||||
public class SpanFirstQueryParser extends AbstractIndexComponent implements XContentQueryParser {
|
||||
|
||||
public static final String NAME = "span_first";
|
||||
|
||||
@Inject public SpanFirstJsonQueryParser(Index index, @IndexSettings Settings settings) {
|
||||
@Inject public SpanFirstQueryParser(Index index, @IndexSettings Settings settings) {
|
||||
super(index, settings);
|
||||
}
|
||||
|
||||
@ -49,8 +48,8 @@ public class SpanFirstJsonQueryParser extends AbstractIndexComponent implements
|
||||
return new String[]{NAME, Strings.toCamelCase(NAME)};
|
||||
}
|
||||
|
||||
@Override public Query parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
JsonParser jp = parseContext.jp();
|
||||
@Override public Query parse(QueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
XContentParser parser = parseContext.parser();
|
||||
|
||||
float boost = 1.0f;
|
||||
|
||||
@ -58,11 +57,11 @@ public class SpanFirstJsonQueryParser extends AbstractIndexComponent implements
|
||||
int end = -1;
|
||||
|
||||
String currentFieldName = null;
|
||||
JsonToken token;
|
||||
while ((token = jp.nextToken()) != JsonToken.END_OBJECT) {
|
||||
if (token == JsonToken.FIELD_NAME) {
|
||||
currentFieldName = jp.getCurrentName();
|
||||
} else if (token == JsonToken.START_OBJECT) {
|
||||
XContentParser.Token token;
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
|
||||
if (token == XContentParser.Token.FIELD_NAME) {
|
||||
currentFieldName = parser.currentName();
|
||||
} else if (token == XContentParser.Token.START_OBJECT) {
|
||||
if ("match".equals(currentFieldName)) {
|
||||
Query query = parseContext.parseInnerQuery();
|
||||
if (!(query instanceof SpanQuery)) {
|
||||
@ -72,17 +71,9 @@ public class SpanFirstJsonQueryParser extends AbstractIndexComponent implements
|
||||
}
|
||||
} else {
|
||||
if ("boost".equals(currentFieldName)) {
|
||||
if (token == JsonToken.VALUE_STRING) {
|
||||
boost = Float.parseFloat(jp.getText());
|
||||
} else {
|
||||
boost = jp.getFloatValue();
|
||||
}
|
||||
boost = parser.floatValue();
|
||||
} else if ("end".equals(currentFieldName)) {
|
||||
if (token == JsonToken.VALUE_STRING) {
|
||||
end = Integer.parseInt(jp.getText());
|
||||
} else {
|
||||
end = jp.getIntValue();
|
||||
}
|
||||
end = parser.intValue();
|
||||
}
|
||||
}
|
||||
}
|
@ -17,20 +17,20 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.index.query.QueryBuilderException;
|
||||
import org.elasticsearch.util.json.JsonBuilder;
|
||||
import org.elasticsearch.util.xcontent.builder.XContentBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* @author kimchy (Shay Banon)
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class SpanNearJsonQueryBuilder extends BaseJsonQueryBuilder implements JsonSpanQueryBuilder {
|
||||
public class SpanNearQueryBuilder extends BaseQueryBuilder implements XContentSpanQueryBuilder {
|
||||
|
||||
private ArrayList<JsonSpanQueryBuilder> clauses = new ArrayList<JsonSpanQueryBuilder>();
|
||||
private ArrayList<XContentSpanQueryBuilder> clauses = new ArrayList<XContentSpanQueryBuilder>();
|
||||
|
||||
private int slop = -1;
|
||||
|
||||
@ -40,42 +40,42 @@ public class SpanNearJsonQueryBuilder extends BaseJsonQueryBuilder implements Js
|
||||
|
||||
private float boost = -1;
|
||||
|
||||
public SpanNearJsonQueryBuilder clause(JsonSpanQueryBuilder clause) {
|
||||
public SpanNearQueryBuilder clause(XContentSpanQueryBuilder clause) {
|
||||
clauses.add(clause);
|
||||
return this;
|
||||
}
|
||||
|
||||
public SpanNearJsonQueryBuilder slop(int slop) {
|
||||
public SpanNearQueryBuilder slop(int slop) {
|
||||
this.slop = slop;
|
||||
return this;
|
||||
}
|
||||
|
||||
public SpanNearJsonQueryBuilder inOrder(boolean inOrder) {
|
||||
public SpanNearQueryBuilder inOrder(boolean inOrder) {
|
||||
this.inOrder = inOrder;
|
||||
return this;
|
||||
}
|
||||
|
||||
public SpanNearJsonQueryBuilder collectPayloads(boolean collectPayloads) {
|
||||
public SpanNearQueryBuilder collectPayloads(boolean collectPayloads) {
|
||||
this.collectPayloads = collectPayloads;
|
||||
return this;
|
||||
}
|
||||
|
||||
public SpanNearJsonQueryBuilder boost(float boost) {
|
||||
public SpanNearQueryBuilder boost(float boost) {
|
||||
this.boost = boost;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override protected void doJson(JsonBuilder builder, Params params) throws IOException {
|
||||
@Override protected void doXContent(XContentBuilder builder, Params params) throws IOException {
|
||||
if (clauses.isEmpty()) {
|
||||
throw new QueryBuilderException("Must have at least one clause when building a spanNear query");
|
||||
}
|
||||
if (slop == -1) {
|
||||
throw new QueryBuilderException("Must set the slop when building a spanNear query");
|
||||
}
|
||||
builder.startObject(SpanNearJsonQueryParser.NAME);
|
||||
builder.startObject(SpanNearQueryParser.NAME);
|
||||
builder.startArray("clauses");
|
||||
for (JsonSpanQueryBuilder clause : clauses) {
|
||||
clause.toJson(builder, params);
|
||||
for (XContentSpanQueryBuilder clause : clauses) {
|
||||
clause.toXContent(builder, params);
|
||||
}
|
||||
builder.endArray();
|
||||
builder.field("slop", slop);
|
@ -17,21 +17,19 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.apache.lucene.search.Query;
|
||||
import org.apache.lucene.search.spans.SpanNearQuery;
|
||||
import org.apache.lucene.search.spans.SpanQuery;
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.codehaus.jackson.JsonToken;
|
||||
import org.elasticsearch.index.AbstractIndexComponent;
|
||||
import org.elasticsearch.index.Index;
|
||||
import org.elasticsearch.index.query.QueryParsingException;
|
||||
import org.elasticsearch.index.settings.IndexSettings;
|
||||
import org.elasticsearch.util.Booleans;
|
||||
import org.elasticsearch.util.Strings;
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.elasticsearch.util.settings.Settings;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
@ -41,11 +39,11 @@ import static org.elasticsearch.util.gcommon.collect.Lists.*;
|
||||
/**
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class SpanNearJsonQueryParser extends AbstractIndexComponent implements JsonQueryParser {
|
||||
public class SpanNearQueryParser extends AbstractIndexComponent implements XContentQueryParser {
|
||||
|
||||
public static final String NAME = "span_near";
|
||||
|
||||
@Inject public SpanNearJsonQueryParser(Index index, @IndexSettings Settings settings) {
|
||||
@Inject public SpanNearQueryParser(Index index, @IndexSettings Settings settings) {
|
||||
super(index, settings);
|
||||
}
|
||||
|
||||
@ -53,8 +51,8 @@ public class SpanNearJsonQueryParser extends AbstractIndexComponent implements J
|
||||
return new String[]{NAME, Strings.toCamelCase(NAME)};
|
||||
}
|
||||
|
||||
@Override public Query parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
JsonParser jp = parseContext.jp();
|
||||
@Override public Query parse(QueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
XContentParser parser = parseContext.parser();
|
||||
|
||||
float boost = 1.0f;
|
||||
int slop = -1;
|
||||
@ -64,13 +62,13 @@ public class SpanNearJsonQueryParser extends AbstractIndexComponent implements J
|
||||
List<SpanQuery> clauses = newArrayList();
|
||||
|
||||
String currentFieldName = null;
|
||||
JsonToken token;
|
||||
while ((token = jp.nextToken()) != JsonToken.END_OBJECT) {
|
||||
if (token == JsonToken.FIELD_NAME) {
|
||||
currentFieldName = jp.getCurrentName();
|
||||
} else if (token == JsonToken.START_ARRAY) {
|
||||
XContentParser.Token token;
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
|
||||
if (token == XContentParser.Token.FIELD_NAME) {
|
||||
currentFieldName = parser.currentName();
|
||||
} else if (token == XContentParser.Token.START_ARRAY) {
|
||||
if ("clauses".equals(currentFieldName)) {
|
||||
while ((token = jp.nextToken()) != JsonToken.END_ARRAY) {
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
|
||||
Query query = parseContext.parseInnerQuery();
|
||||
if (!(query instanceof SpanQuery)) {
|
||||
throw new QueryParsingException(index, "spanNear [clauses] must be of type span query");
|
||||
@ -78,35 +76,15 @@ public class SpanNearJsonQueryParser extends AbstractIndexComponent implements J
|
||||
clauses.add((SpanQuery) query);
|
||||
}
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_STRING) {
|
||||
} else if (token.isValue()) {
|
||||
if ("in_order".equals(currentFieldName) || "inOrder".equals(currentFieldName)) {
|
||||
inOrder = Booleans.parseBoolean(jp.getText(), inOrder);
|
||||
inOrder = parser.booleanValue();
|
||||
} else if ("collect_payloads".equals(currentFieldName) || "collectPayloads".equals(currentFieldName)) {
|
||||
collectPayloads = Booleans.parseBoolean(jp.getText(), collectPayloads);
|
||||
collectPayloads = parser.booleanValue();
|
||||
} else if ("slop".equals(currentFieldName)) {
|
||||
slop = Integer.parseInt(jp.getText());
|
||||
slop = parser.intValue();
|
||||
} else if ("boost".equals(currentFieldName)) {
|
||||
boost = Float.parseFloat(jp.getText());
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE) {
|
||||
if ("in_order".equals(currentFieldName) || "inOrder".equals(currentFieldName)) {
|
||||
inOrder = token == JsonToken.VALUE_TRUE;
|
||||
} else if ("collect_payloads".equals(currentFieldName) || "collectPayloads".equals(currentFieldName)) {
|
||||
collectPayloads = token == JsonToken.VALUE_TRUE;
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_NUMBER_INT) {
|
||||
if ("in_order".equals(currentFieldName) || "inOrder".equals(currentFieldName)) {
|
||||
inOrder = jp.getIntValue() != 0;
|
||||
} else if ("collect_payloads".equals(currentFieldName) || "collectPayloads".equals(currentFieldName)) {
|
||||
collectPayloads = jp.getIntValue() != 0;
|
||||
} else if ("slop".equals(currentFieldName)) {
|
||||
slop = jp.getIntValue();
|
||||
} else if ("boost".equals(currentFieldName)) {
|
||||
boost = jp.getIntValue();
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_NUMBER_FLOAT) {
|
||||
if ("boost".equals(currentFieldName)) {
|
||||
boost = jp.getFloatValue();
|
||||
boost = parser.floatValue();
|
||||
}
|
||||
}
|
||||
}
|
@ -17,51 +17,51 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.index.query.QueryBuilderException;
|
||||
import org.elasticsearch.util.json.JsonBuilder;
|
||||
import org.elasticsearch.util.xcontent.builder.XContentBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* @author kimchy (Shay Banon)
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class SpanNotJsonQueryBuilder extends BaseJsonQueryBuilder implements JsonSpanQueryBuilder {
|
||||
public class SpanNotQueryBuilder extends BaseQueryBuilder implements XContentSpanQueryBuilder {
|
||||
|
||||
private JsonSpanQueryBuilder include;
|
||||
private XContentSpanQueryBuilder include;
|
||||
|
||||
private JsonSpanQueryBuilder exclude;
|
||||
private XContentSpanQueryBuilder exclude;
|
||||
|
||||
private float boost = -1;
|
||||
|
||||
public SpanNotJsonQueryBuilder include(JsonSpanQueryBuilder include) {
|
||||
public SpanNotQueryBuilder include(XContentSpanQueryBuilder include) {
|
||||
this.include = include;
|
||||
return this;
|
||||
}
|
||||
|
||||
public SpanNotJsonQueryBuilder exclude(JsonSpanQueryBuilder exclude) {
|
||||
public SpanNotQueryBuilder exclude(XContentSpanQueryBuilder exclude) {
|
||||
this.exclude = exclude;
|
||||
return this;
|
||||
}
|
||||
|
||||
public SpanNotJsonQueryBuilder boost(float boost) {
|
||||
public SpanNotQueryBuilder boost(float boost) {
|
||||
this.boost = boost;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override protected void doJson(JsonBuilder builder, Params params) throws IOException {
|
||||
@Override protected void doXContent(XContentBuilder builder, Params params) throws IOException {
|
||||
if (include == null) {
|
||||
throw new QueryBuilderException("Must specify include when using spanNot query");
|
||||
}
|
||||
if (exclude == null) {
|
||||
throw new QueryBuilderException("Must specify exclude when using spanNot query");
|
||||
}
|
||||
builder.startObject(SpanNotJsonQueryParser.NAME);
|
||||
builder.startObject(SpanNotQueryParser.NAME);
|
||||
builder.field("include");
|
||||
include.toJson(builder, params);
|
||||
include.toXContent(builder, params);
|
||||
builder.field("exclude");
|
||||
exclude.toJson(builder, params);
|
||||
exclude.toXContent(builder, params);
|
||||
if (boost == -1) {
|
||||
builder.field("boost", boost);
|
||||
}
|
@ -17,31 +17,30 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.apache.lucene.search.Query;
|
||||
import org.apache.lucene.search.spans.SpanNotQuery;
|
||||
import org.apache.lucene.search.spans.SpanQuery;
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.codehaus.jackson.JsonToken;
|
||||
import org.elasticsearch.index.AbstractIndexComponent;
|
||||
import org.elasticsearch.index.Index;
|
||||
import org.elasticsearch.index.query.QueryParsingException;
|
||||
import org.elasticsearch.index.settings.IndexSettings;
|
||||
import org.elasticsearch.util.Strings;
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.elasticsearch.util.settings.Settings;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class SpanNotJsonQueryParser extends AbstractIndexComponent implements JsonQueryParser {
|
||||
public class SpanNotQueryParser extends AbstractIndexComponent implements XContentQueryParser {
|
||||
|
||||
public static final String NAME = "span_not";
|
||||
|
||||
@Inject public SpanNotJsonQueryParser(Index index, @IndexSettings Settings settings) {
|
||||
@Inject public SpanNotQueryParser(Index index, @IndexSettings Settings settings) {
|
||||
super(index, settings);
|
||||
}
|
||||
|
||||
@ -49,8 +48,8 @@ public class SpanNotJsonQueryParser extends AbstractIndexComponent implements Js
|
||||
return new String[]{NAME, Strings.toCamelCase(NAME)};
|
||||
}
|
||||
|
||||
@Override public Query parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
JsonParser jp = parseContext.jp();
|
||||
@Override public Query parse(QueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
XContentParser parser = parseContext.parser();
|
||||
|
||||
float boost = 1.0f;
|
||||
|
||||
@ -58,11 +57,11 @@ public class SpanNotJsonQueryParser extends AbstractIndexComponent implements Js
|
||||
SpanQuery exclude = null;
|
||||
|
||||
String currentFieldName = null;
|
||||
JsonToken token;
|
||||
while ((token = jp.nextToken()) != JsonToken.END_OBJECT) {
|
||||
if (token == JsonToken.FIELD_NAME) {
|
||||
currentFieldName = jp.getCurrentName();
|
||||
} else if (token == JsonToken.START_OBJECT) {
|
||||
XContentParser.Token token;
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
|
||||
if (token == XContentParser.Token.FIELD_NAME) {
|
||||
currentFieldName = parser.currentName();
|
||||
} else if (token == XContentParser.Token.START_OBJECT) {
|
||||
if ("include".equals(currentFieldName)) {
|
||||
Query query = parseContext.parseInnerQuery();
|
||||
if (!(query instanceof SpanQuery)) {
|
||||
@ -78,11 +77,7 @@ public class SpanNotJsonQueryParser extends AbstractIndexComponent implements Js
|
||||
}
|
||||
} else {
|
||||
if ("boost".equals(currentFieldName)) {
|
||||
if (token == JsonToken.VALUE_STRING) {
|
||||
boost = Float.parseFloat(jp.getText());
|
||||
} else {
|
||||
boost = jp.getFloatValue();
|
||||
}
|
||||
boost = parser.floatValue();
|
||||
}
|
||||
}
|
||||
}
|
@ -17,41 +17,41 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.index.query.QueryBuilderException;
|
||||
import org.elasticsearch.util.json.JsonBuilder;
|
||||
import org.elasticsearch.util.xcontent.builder.XContentBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* @author kimchy (Shay Banon)
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class SpanOrJsonQueryBuilder extends BaseJsonQueryBuilder implements JsonSpanQueryBuilder {
|
||||
public class SpanOrQueryBuilder extends BaseQueryBuilder implements XContentSpanQueryBuilder {
|
||||
|
||||
private ArrayList<JsonSpanQueryBuilder> clauses = new ArrayList<JsonSpanQueryBuilder>();
|
||||
private ArrayList<XContentSpanQueryBuilder> clauses = new ArrayList<XContentSpanQueryBuilder>();
|
||||
|
||||
private float boost = -1;
|
||||
|
||||
public SpanOrJsonQueryBuilder clause(JsonSpanQueryBuilder clause) {
|
||||
public SpanOrQueryBuilder clause(XContentSpanQueryBuilder clause) {
|
||||
clauses.add(clause);
|
||||
return this;
|
||||
}
|
||||
|
||||
public SpanOrJsonQueryBuilder boost(float boost) {
|
||||
public SpanOrQueryBuilder boost(float boost) {
|
||||
this.boost = boost;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override protected void doJson(JsonBuilder builder, Params params) throws IOException {
|
||||
@Override protected void doXContent(XContentBuilder builder, Params params) throws IOException {
|
||||
if (clauses.isEmpty()) {
|
||||
throw new QueryBuilderException("Must have at least one clause when building a spanOr query");
|
||||
}
|
||||
builder.startObject(SpanOrJsonQueryParser.NAME);
|
||||
builder.startObject(SpanOrQueryParser.NAME);
|
||||
builder.startArray("clauses");
|
||||
for (JsonSpanQueryBuilder clause : clauses) {
|
||||
clause.toJson(builder, params);
|
||||
for (XContentSpanQueryBuilder clause : clauses) {
|
||||
clause.toXContent(builder, params);
|
||||
}
|
||||
builder.endArray();
|
||||
if (boost != -1) {
|
@ -17,20 +17,19 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.apache.lucene.search.Query;
|
||||
import org.apache.lucene.search.spans.SpanOrQuery;
|
||||
import org.apache.lucene.search.spans.SpanQuery;
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.codehaus.jackson.JsonToken;
|
||||
import org.elasticsearch.index.AbstractIndexComponent;
|
||||
import org.elasticsearch.index.Index;
|
||||
import org.elasticsearch.index.query.QueryParsingException;
|
||||
import org.elasticsearch.index.settings.IndexSettings;
|
||||
import org.elasticsearch.util.Strings;
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.elasticsearch.util.settings.Settings;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
@ -38,13 +37,13 @@ import java.util.List;
|
||||
import static org.elasticsearch.util.gcommon.collect.Lists.*;
|
||||
|
||||
/**
|
||||
* @author kimchy (Shay Banon)
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class SpanOrJsonQueryParser extends AbstractIndexComponent implements JsonQueryParser {
|
||||
public class SpanOrQueryParser extends AbstractIndexComponent implements XContentQueryParser {
|
||||
|
||||
public static final String NAME = "span_or";
|
||||
|
||||
@Inject public SpanOrJsonQueryParser(Index index, @IndexSettings Settings settings) {
|
||||
@Inject public SpanOrQueryParser(Index index, @IndexSettings Settings settings) {
|
||||
super(index, settings);
|
||||
}
|
||||
|
||||
@ -52,21 +51,21 @@ public class SpanOrJsonQueryParser extends AbstractIndexComponent implements Jso
|
||||
return new String[]{NAME, Strings.toCamelCase(NAME)};
|
||||
}
|
||||
|
||||
@Override public Query parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
JsonParser jp = parseContext.jp();
|
||||
@Override public Query parse(QueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
XContentParser parser = parseContext.parser();
|
||||
|
||||
float boost = 1.0f;
|
||||
|
||||
List<SpanQuery> clauses = newArrayList();
|
||||
|
||||
String currentFieldName = null;
|
||||
JsonToken token;
|
||||
while ((token = jp.nextToken()) != JsonToken.END_OBJECT) {
|
||||
if (token == JsonToken.FIELD_NAME) {
|
||||
currentFieldName = jp.getCurrentName();
|
||||
} else if (token == JsonToken.START_ARRAY) {
|
||||
XContentParser.Token token;
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
|
||||
if (token == XContentParser.Token.FIELD_NAME) {
|
||||
currentFieldName = parser.currentName();
|
||||
} else if (token == XContentParser.Token.START_ARRAY) {
|
||||
if ("clauses".equals(currentFieldName)) {
|
||||
while ((token = jp.nextToken()) != JsonToken.END_ARRAY) {
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
|
||||
Query query = parseContext.parseInnerQuery();
|
||||
if (!(query instanceof SpanQuery)) {
|
||||
throw new QueryParsingException(index, "spanNear [clauses] must be of type span query");
|
||||
@ -76,11 +75,7 @@ public class SpanOrJsonQueryParser extends AbstractIndexComponent implements Jso
|
||||
}
|
||||
} else {
|
||||
if ("boost".equals(currentFieldName)) {
|
||||
if (token == JsonToken.VALUE_STRING) {
|
||||
boost = Float.parseFloat(jp.getText());
|
||||
} else {
|
||||
boost = jp.getFloatValue();
|
||||
}
|
||||
boost = parser.floatValue();
|
||||
}
|
||||
}
|
||||
}
|
@ -17,16 +17,16 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.json.JsonBuilder;
|
||||
import org.elasticsearch.util.xcontent.builder.XContentBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* @author kimchy (Shay Banon)
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class SpanTermJsonQueryBuilder extends BaseJsonQueryBuilder implements JsonSpanQueryBuilder {
|
||||
public class SpanTermQueryBuilder extends BaseQueryBuilder implements XContentSpanQueryBuilder {
|
||||
|
||||
private final String name;
|
||||
|
||||
@ -34,38 +34,38 @@ public class SpanTermJsonQueryBuilder extends BaseJsonQueryBuilder implements Js
|
||||
|
||||
private float boost = -1;
|
||||
|
||||
public SpanTermJsonQueryBuilder(String name, String value) {
|
||||
public SpanTermQueryBuilder(String name, String value) {
|
||||
this(name, (Object) value);
|
||||
}
|
||||
|
||||
public SpanTermJsonQueryBuilder(String name, int value) {
|
||||
public SpanTermQueryBuilder(String name, int value) {
|
||||
this(name, (Object) value);
|
||||
}
|
||||
|
||||
public SpanTermJsonQueryBuilder(String name, long value) {
|
||||
public SpanTermQueryBuilder(String name, long value) {
|
||||
this(name, (Object) value);
|
||||
}
|
||||
|
||||
public SpanTermJsonQueryBuilder(String name, float value) {
|
||||
public SpanTermQueryBuilder(String name, float value) {
|
||||
this(name, (Object) value);
|
||||
}
|
||||
|
||||
public SpanTermJsonQueryBuilder(String name, double value) {
|
||||
public SpanTermQueryBuilder(String name, double value) {
|
||||
this(name, (Object) value);
|
||||
}
|
||||
|
||||
private SpanTermJsonQueryBuilder(String name, Object value) {
|
||||
private SpanTermQueryBuilder(String name, Object value) {
|
||||
this.name = name;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public SpanTermJsonQueryBuilder boost(float boost) {
|
||||
public SpanTermQueryBuilder boost(float boost) {
|
||||
this.boost = boost;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override public void doJson(JsonBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(SpanTermJsonQueryParser.NAME);
|
||||
@Override public void doXContent(XContentBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(SpanTermQueryParser.NAME);
|
||||
if (boost == -1) {
|
||||
builder.field(name, value);
|
||||
} else {
|
@ -17,34 +17,33 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.apache.lucene.index.Term;
|
||||
import org.apache.lucene.search.Query;
|
||||
import org.apache.lucene.search.spans.SpanTermQuery;
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.codehaus.jackson.JsonToken;
|
||||
import org.elasticsearch.index.AbstractIndexComponent;
|
||||
import org.elasticsearch.index.Index;
|
||||
import org.elasticsearch.index.mapper.MapperService;
|
||||
import org.elasticsearch.index.query.QueryParsingException;
|
||||
import org.elasticsearch.index.settings.IndexSettings;
|
||||
import org.elasticsearch.util.Strings;
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.elasticsearch.util.settings.Settings;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import static org.elasticsearch.index.query.support.QueryParsers.*;
|
||||
|
||||
/**
|
||||
* @author kimchy (Shay Banon)
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class SpanTermJsonQueryParser extends AbstractIndexComponent implements JsonQueryParser {
|
||||
public class SpanTermQueryParser extends AbstractIndexComponent implements XContentQueryParser {
|
||||
|
||||
public static final String NAME = "span_term";
|
||||
|
||||
@Inject public SpanTermJsonQueryParser(Index index, @IndexSettings Settings settings) {
|
||||
@Inject public SpanTermQueryParser(Index index, @IndexSettings Settings settings) {
|
||||
super(index, settings);
|
||||
}
|
||||
|
||||
@ -52,41 +51,37 @@ public class SpanTermJsonQueryParser extends AbstractIndexComponent implements J
|
||||
return new String[]{NAME, Strings.toCamelCase(NAME)};
|
||||
}
|
||||
|
||||
@Override public Query parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
JsonParser jp = parseContext.jp();
|
||||
@Override public Query parse(QueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
XContentParser parser = parseContext.parser();
|
||||
|
||||
JsonToken token = jp.getCurrentToken();
|
||||
if (token == JsonToken.START_OBJECT) {
|
||||
token = jp.nextToken();
|
||||
XContentParser.Token token = parser.currentToken();
|
||||
if (token == XContentParser.Token.START_OBJECT) {
|
||||
token = parser.nextToken();
|
||||
}
|
||||
assert token == JsonToken.FIELD_NAME;
|
||||
String fieldName = jp.getCurrentName();
|
||||
assert token == XContentParser.Token.FIELD_NAME;
|
||||
String fieldName = parser.currentName();
|
||||
|
||||
|
||||
String value = null;
|
||||
float boost = 1.0f;
|
||||
token = jp.nextToken();
|
||||
if (token == JsonToken.START_OBJECT) {
|
||||
token = parser.nextToken();
|
||||
if (token == XContentParser.Token.START_OBJECT) {
|
||||
String currentFieldName = null;
|
||||
while ((token = jp.nextToken()) != JsonToken.END_OBJECT) {
|
||||
if (token == JsonToken.FIELD_NAME) {
|
||||
currentFieldName = jp.getCurrentName();
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
|
||||
if (token == XContentParser.Token.FIELD_NAME) {
|
||||
currentFieldName = parser.currentName();
|
||||
} else {
|
||||
if ("value".equals(currentFieldName)) {
|
||||
value = jp.getText();
|
||||
value = parser.text();
|
||||
} else if ("boost".equals(currentFieldName)) {
|
||||
if (token == JsonToken.VALUE_STRING) {
|
||||
boost = Float.parseFloat(jp.getText());
|
||||
} else {
|
||||
boost = jp.getFloatValue();
|
||||
}
|
||||
boost = parser.floatValue();
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
value = jp.getText();
|
||||
value = parser.text();
|
||||
// move to the next token
|
||||
jp.nextToken();
|
||||
parser.nextToken();
|
||||
}
|
||||
|
||||
if (value == null) {
|
@ -17,9 +17,9 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.json.JsonBuilder;
|
||||
import org.elasticsearch.util.xcontent.builder.XContentBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@ -28,7 +28,7 @@ import java.io.IOException;
|
||||
*
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class TermJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
public class TermFilterBuilder extends BaseFilterBuilder {
|
||||
|
||||
private final String name;
|
||||
|
||||
@ -40,7 +40,7 @@ public class TermJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
* @param name The field name
|
||||
* @param value The term value
|
||||
*/
|
||||
public TermJsonFilterBuilder(String name, String value) {
|
||||
public TermFilterBuilder(String name, String value) {
|
||||
this(name, (Object) value);
|
||||
}
|
||||
|
||||
@ -50,7 +50,7 @@ public class TermJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
* @param name The field name
|
||||
* @param value The term value
|
||||
*/
|
||||
public TermJsonFilterBuilder(String name, int value) {
|
||||
public TermFilterBuilder(String name, int value) {
|
||||
this(name, (Object) value);
|
||||
}
|
||||
|
||||
@ -60,7 +60,7 @@ public class TermJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
* @param name The field name
|
||||
* @param value The term value
|
||||
*/
|
||||
public TermJsonFilterBuilder(String name, long value) {
|
||||
public TermFilterBuilder(String name, long value) {
|
||||
this(name, (Object) value);
|
||||
}
|
||||
|
||||
@ -70,7 +70,7 @@ public class TermJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
* @param name The field name
|
||||
* @param value The term value
|
||||
*/
|
||||
public TermJsonFilterBuilder(String name, float value) {
|
||||
public TermFilterBuilder(String name, float value) {
|
||||
this(name, (Object) value);
|
||||
}
|
||||
|
||||
@ -80,7 +80,7 @@ public class TermJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
* @param name The field name
|
||||
* @param value The term value
|
||||
*/
|
||||
public TermJsonFilterBuilder(String name, double value) {
|
||||
public TermFilterBuilder(String name, double value) {
|
||||
this(name, (Object) value);
|
||||
}
|
||||
|
||||
@ -90,13 +90,13 @@ public class TermJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
* @param name The field name
|
||||
* @param value The term value
|
||||
*/
|
||||
public TermJsonFilterBuilder(String name, Object value) {
|
||||
public TermFilterBuilder(String name, Object value) {
|
||||
this.name = name;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
@Override public void doJson(JsonBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(TermJsonFilterParser.NAME);
|
||||
@Override public void doXContent(XContentBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(TermFilterParser.NAME);
|
||||
builder.field(name, value);
|
||||
builder.endObject();
|
||||
}
|
@ -17,33 +17,32 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.apache.lucene.index.Term;
|
||||
import org.apache.lucene.search.Filter;
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.codehaus.jackson.JsonToken;
|
||||
import org.elasticsearch.index.AbstractIndexComponent;
|
||||
import org.elasticsearch.index.Index;
|
||||
import org.elasticsearch.index.mapper.MapperService;
|
||||
import org.elasticsearch.index.query.QueryParsingException;
|
||||
import org.elasticsearch.index.settings.IndexSettings;
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.elasticsearch.util.lucene.search.TermFilter;
|
||||
import org.elasticsearch.util.settings.Settings;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import static org.elasticsearch.index.query.support.QueryParsers.*;
|
||||
|
||||
/**
|
||||
* @author kimchy (Shay Banon)
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class TermJsonFilterParser extends AbstractIndexComponent implements JsonFilterParser {
|
||||
public class TermFilterParser extends AbstractIndexComponent implements XContentFilterParser {
|
||||
|
||||
public static final String NAME = "term";
|
||||
|
||||
@Inject public TermJsonFilterParser(Index index, @IndexSettings Settings settings) {
|
||||
@Inject public TermFilterParser(Index index, @IndexSettings Settings settings) {
|
||||
super(index, settings);
|
||||
}
|
||||
|
||||
@ -51,18 +50,18 @@ public class TermJsonFilterParser extends AbstractIndexComponent implements Json
|
||||
return new String[]{NAME};
|
||||
}
|
||||
|
||||
@Override public Filter parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
JsonParser jp = parseContext.jp();
|
||||
@Override public Filter parse(QueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
XContentParser parser = parseContext.parser();
|
||||
|
||||
JsonToken token = jp.nextToken();
|
||||
assert token == JsonToken.FIELD_NAME;
|
||||
String fieldName = jp.getCurrentName();
|
||||
XContentParser.Token token = parser.nextToken();
|
||||
assert token == XContentParser.Token.FIELD_NAME;
|
||||
String fieldName = parser.currentName();
|
||||
|
||||
|
||||
jp.nextToken();
|
||||
String value = jp.getText();
|
||||
parser.nextToken();
|
||||
String value = parser.text();
|
||||
// move to the next token (from VALUE)
|
||||
jp.nextToken();
|
||||
parser.nextToken();
|
||||
|
||||
if (value == null) {
|
||||
throw new QueryParsingException(index, "No value specified for term filter");
|
@ -17,9 +17,9 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.json.JsonBuilder;
|
||||
import org.elasticsearch.util.xcontent.builder.XContentBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@ -28,7 +28,7 @@ import java.io.IOException;
|
||||
*
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class TermJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
public class TermQueryBuilder extends BaseQueryBuilder {
|
||||
|
||||
private final String name;
|
||||
|
||||
@ -42,7 +42,7 @@ public class TermJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* @param name The name of the field
|
||||
* @param value The value of the term
|
||||
*/
|
||||
public TermJsonQueryBuilder(String name, String value) {
|
||||
public TermQueryBuilder(String name, String value) {
|
||||
this(name, (Object) value);
|
||||
}
|
||||
|
||||
@ -52,7 +52,7 @@ public class TermJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* @param name The name of the field
|
||||
* @param value The value of the term
|
||||
*/
|
||||
public TermJsonQueryBuilder(String name, int value) {
|
||||
public TermQueryBuilder(String name, int value) {
|
||||
this(name, (Object) value);
|
||||
}
|
||||
|
||||
@ -62,7 +62,7 @@ public class TermJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* @param name The name of the field
|
||||
* @param value The value of the term
|
||||
*/
|
||||
public TermJsonQueryBuilder(String name, long value) {
|
||||
public TermQueryBuilder(String name, long value) {
|
||||
this(name, (Object) value);
|
||||
}
|
||||
|
||||
@ -72,7 +72,7 @@ public class TermJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* @param name The name of the field
|
||||
* @param value The value of the term
|
||||
*/
|
||||
public TermJsonQueryBuilder(String name, float value) {
|
||||
public TermQueryBuilder(String name, float value) {
|
||||
this(name, (Object) value);
|
||||
}
|
||||
|
||||
@ -82,7 +82,7 @@ public class TermJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* @param name The name of the field
|
||||
* @param value The value of the term
|
||||
*/
|
||||
public TermJsonQueryBuilder(String name, double value) {
|
||||
public TermQueryBuilder(String name, double value) {
|
||||
this(name, (Object) value);
|
||||
}
|
||||
|
||||
@ -92,7 +92,7 @@ public class TermJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* @param name The name of the field
|
||||
* @param value The value of the term
|
||||
*/
|
||||
private TermJsonQueryBuilder(String name, Object value) {
|
||||
private TermQueryBuilder(String name, Object value) {
|
||||
this.name = name;
|
||||
this.value = value;
|
||||
}
|
||||
@ -101,13 +101,13 @@ public class TermJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* Sets the boost for this query. Documents matching this query will (in addition to the normal
|
||||
* weightings) have their score multiplied by the boost provided.
|
||||
*/
|
||||
public TermJsonQueryBuilder boost(float boost) {
|
||||
public TermQueryBuilder boost(float boost) {
|
||||
this.boost = boost;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override public void doJson(JsonBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(TermJsonQueryParser.NAME);
|
||||
@Override public void doXContent(XContentBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(TermQueryParser.NAME);
|
||||
if (boost == -1) {
|
||||
builder.field(name, value);
|
||||
} else {
|
@ -17,20 +17,19 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.apache.lucene.index.Term;
|
||||
import org.apache.lucene.search.Query;
|
||||
import org.apache.lucene.search.TermQuery;
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.codehaus.jackson.JsonToken;
|
||||
import org.elasticsearch.index.AbstractIndexComponent;
|
||||
import org.elasticsearch.index.Index;
|
||||
import org.elasticsearch.index.mapper.MapperService;
|
||||
import org.elasticsearch.index.query.QueryParsingException;
|
||||
import org.elasticsearch.index.settings.IndexSettings;
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.elasticsearch.util.settings.Settings;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@ -39,11 +38,11 @@ import static org.elasticsearch.index.query.support.QueryParsers.*;
|
||||
/**
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class TermJsonQueryParser extends AbstractIndexComponent implements JsonQueryParser {
|
||||
public class TermQueryParser extends AbstractIndexComponent implements XContentQueryParser {
|
||||
|
||||
public static final String NAME = "term";
|
||||
|
||||
@Inject public TermJsonQueryParser(Index index, @IndexSettings Settings settings) {
|
||||
@Inject public TermQueryParser(Index index, @IndexSettings Settings settings) {
|
||||
super(index, settings);
|
||||
}
|
||||
|
||||
@ -51,38 +50,34 @@ public class TermJsonQueryParser extends AbstractIndexComponent implements JsonQ
|
||||
return new String[]{NAME};
|
||||
}
|
||||
|
||||
@Override public Query parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
JsonParser jp = parseContext.jp();
|
||||
@Override public Query parse(QueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
XContentParser parser = parseContext.parser();
|
||||
|
||||
JsonToken token = jp.nextToken();
|
||||
assert token == JsonToken.FIELD_NAME;
|
||||
String fieldName = jp.getCurrentName();
|
||||
XContentParser.Token token = parser.nextToken();
|
||||
assert token == XContentParser.Token.FIELD_NAME;
|
||||
String fieldName = parser.currentName();
|
||||
|
||||
String value = null;
|
||||
float boost = 1.0f;
|
||||
token = jp.nextToken();
|
||||
if (token == JsonToken.START_OBJECT) {
|
||||
token = parser.nextToken();
|
||||
if (token == XContentParser.Token.START_OBJECT) {
|
||||
String currentFieldName = null;
|
||||
while ((token = jp.nextToken()) != JsonToken.END_OBJECT) {
|
||||
if (token == JsonToken.FIELD_NAME) {
|
||||
currentFieldName = jp.getCurrentName();
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
|
||||
if (token == XContentParser.Token.FIELD_NAME) {
|
||||
currentFieldName = parser.currentName();
|
||||
} else {
|
||||
if ("value".equals(currentFieldName)) {
|
||||
value = jp.getText();
|
||||
value = parser.text();
|
||||
} else if ("boost".equals(currentFieldName)) {
|
||||
if (token == JsonToken.VALUE_STRING) {
|
||||
boost = Float.parseFloat(jp.getText());
|
||||
} else {
|
||||
boost = jp.getFloatValue();
|
||||
}
|
||||
boost = parser.floatValue();
|
||||
}
|
||||
}
|
||||
}
|
||||
jp.nextToken();
|
||||
parser.nextToken();
|
||||
} else {
|
||||
value = jp.getText();
|
||||
value = parser.text();
|
||||
// move to the next token
|
||||
jp.nextToken();
|
||||
parser.nextToken();
|
||||
}
|
||||
|
||||
if (value == null) {
|
@ -17,9 +17,9 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.json.JsonBuilder;
|
||||
import org.elasticsearch.util.xcontent.builder.XContentBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@ -28,7 +28,7 @@ import java.io.IOException;
|
||||
*
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class TermsJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
public class TermsFilterBuilder extends BaseFilterBuilder {
|
||||
|
||||
private final String name;
|
||||
|
||||
@ -40,7 +40,7 @@ public class TermsJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
* @param name The field name
|
||||
* @param values The terms
|
||||
*/
|
||||
public TermsJsonFilterBuilder(String name, String... values) {
|
||||
public TermsFilterBuilder(String name, String... values) {
|
||||
this(name, (Object[]) values);
|
||||
}
|
||||
|
||||
@ -50,7 +50,7 @@ public class TermsJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
* @param name The field name
|
||||
* @param values The terms
|
||||
*/
|
||||
public TermsJsonFilterBuilder(String name, int... values) {
|
||||
public TermsFilterBuilder(String name, int... values) {
|
||||
this.name = name;
|
||||
this.values = new Integer[values.length];
|
||||
for (int i = 0; i < values.length; i++) {
|
||||
@ -64,7 +64,7 @@ public class TermsJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
* @param name The field name
|
||||
* @param values The terms
|
||||
*/
|
||||
public TermsJsonFilterBuilder(String name, long... values) {
|
||||
public TermsFilterBuilder(String name, long... values) {
|
||||
this.name = name;
|
||||
this.values = new Long[values.length];
|
||||
for (int i = 0; i < values.length; i++) {
|
||||
@ -78,7 +78,7 @@ public class TermsJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
* @param name The field name
|
||||
* @param values The terms
|
||||
*/
|
||||
public TermsJsonFilterBuilder(String name, float... values) {
|
||||
public TermsFilterBuilder(String name, float... values) {
|
||||
this.name = name;
|
||||
this.values = new Float[values.length];
|
||||
for (int i = 0; i < values.length; i++) {
|
||||
@ -92,7 +92,7 @@ public class TermsJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
* @param name The field name
|
||||
* @param values The terms
|
||||
*/
|
||||
public TermsJsonFilterBuilder(String name, double... values) {
|
||||
public TermsFilterBuilder(String name, double... values) {
|
||||
this.name = name;
|
||||
this.values = new Double[values.length];
|
||||
for (int i = 0; i < values.length; i++) {
|
||||
@ -106,13 +106,13 @@ public class TermsJsonFilterBuilder extends BaseJsonFilterBuilder {
|
||||
* @param name The field name
|
||||
* @param values The terms
|
||||
*/
|
||||
public TermsJsonFilterBuilder(String name, Object... values) {
|
||||
public TermsFilterBuilder(String name, Object... values) {
|
||||
this.name = name;
|
||||
this.values = values;
|
||||
}
|
||||
|
||||
@Override public void doJson(JsonBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(TermsJsonFilterParser.NAME);
|
||||
@Override public void doXContent(XContentBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(TermsFilterParser.NAME);
|
||||
builder.startArray(name);
|
||||
for (Object value : values) {
|
||||
builder.value(value);
|
@ -17,22 +17,21 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.apache.lucene.index.Term;
|
||||
import org.apache.lucene.search.Filter;
|
||||
import org.apache.lucene.search.PublicTermsFilter;
|
||||
import org.apache.lucene.search.TermsFilter;
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.codehaus.jackson.JsonToken;
|
||||
import org.elasticsearch.index.AbstractIndexComponent;
|
||||
import org.elasticsearch.index.Index;
|
||||
import org.elasticsearch.index.mapper.FieldMapper;
|
||||
import org.elasticsearch.index.mapper.MapperService;
|
||||
import org.elasticsearch.index.query.QueryParsingException;
|
||||
import org.elasticsearch.index.settings.IndexSettings;
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.elasticsearch.util.settings.Settings;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@ -41,11 +40,11 @@ import static org.elasticsearch.index.query.support.QueryParsers.*;
|
||||
/**
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class TermsJsonFilterParser extends AbstractIndexComponent implements JsonFilterParser {
|
||||
public class TermsFilterParser extends AbstractIndexComponent implements XContentFilterParser {
|
||||
|
||||
public static final String NAME = "terms";
|
||||
|
||||
@Inject public TermsJsonFilterParser(Index index, @IndexSettings Settings settings) {
|
||||
@Inject public TermsFilterParser(Index index, @IndexSettings Settings settings) {
|
||||
super(index, settings);
|
||||
}
|
||||
|
||||
@ -53,12 +52,12 @@ public class TermsJsonFilterParser extends AbstractIndexComponent implements Jso
|
||||
return new String[]{NAME};
|
||||
}
|
||||
|
||||
@Override public Filter parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
JsonParser jp = parseContext.jp();
|
||||
@Override public Filter parse(QueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
XContentParser parser = parseContext.parser();
|
||||
|
||||
JsonToken token = jp.nextToken();
|
||||
assert token == JsonToken.FIELD_NAME;
|
||||
String fieldName = jp.getCurrentName();
|
||||
XContentParser.Token token = parser.nextToken();
|
||||
assert token == XContentParser.Token.FIELD_NAME;
|
||||
String fieldName = parser.currentName();
|
||||
|
||||
FieldMapper fieldMapper = null;
|
||||
MapperService.SmartNameFieldMappers smartNameFieldMappers = parseContext.smartFieldMappers(fieldName);
|
||||
@ -69,14 +68,14 @@ public class TermsJsonFilterParser extends AbstractIndexComponent implements Jso
|
||||
}
|
||||
}
|
||||
|
||||
token = jp.nextToken();
|
||||
if (token != JsonToken.START_ARRAY) {
|
||||
token = parser.nextToken();
|
||||
if (token != XContentParser.Token.START_ARRAY) {
|
||||
throw new QueryParsingException(index, "Terms filter must define the terms to filter on as an array");
|
||||
}
|
||||
|
||||
TermsFilter termsFilter = new PublicTermsFilter();
|
||||
while ((token = jp.nextToken()) != JsonToken.END_ARRAY) {
|
||||
String value = jp.getText();
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
|
||||
String value = parser.text();
|
||||
if (value == null) {
|
||||
throw new QueryParsingException(index, "No value specified for term filter");
|
||||
}
|
||||
@ -85,7 +84,7 @@ public class TermsJsonFilterParser extends AbstractIndexComponent implements Jso
|
||||
}
|
||||
termsFilter.addTerm(new Term(fieldName, value));
|
||||
}
|
||||
jp.nextToken();
|
||||
parser.nextToken();
|
||||
|
||||
|
||||
Filter filter = parseContext.cacheFilterIfPossible(termsFilter);
|
@ -17,9 +17,9 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.json.JsonBuilder;
|
||||
import org.elasticsearch.util.xcontent.builder.XContentBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@ -33,7 +33,7 @@ import java.io.IOException;
|
||||
*
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class WildcardJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
public class WildcardQueryBuilder extends BaseQueryBuilder {
|
||||
|
||||
private final String name;
|
||||
|
||||
@ -52,7 +52,7 @@ public class WildcardJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* @param name The field name
|
||||
* @param wildcard The wildcard query string
|
||||
*/
|
||||
public WildcardJsonQueryBuilder(String name, String wildcard) {
|
||||
public WildcardQueryBuilder(String name, String wildcard) {
|
||||
this.name = name;
|
||||
this.wildcard = wildcard;
|
||||
}
|
||||
@ -61,13 +61,13 @@ public class WildcardJsonQueryBuilder extends BaseJsonQueryBuilder {
|
||||
* Sets the boost for this query. Documents matching this query will (in addition to the normal
|
||||
* weightings) have their score multiplied by the boost provided.
|
||||
*/
|
||||
public WildcardJsonQueryBuilder boost(float boost) {
|
||||
public WildcardQueryBuilder boost(float boost) {
|
||||
this.boost = boost;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override public void doJson(JsonBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(WildcardJsonQueryParser.NAME);
|
||||
@Override public void doXContent(XContentBuilder builder, Params params) throws IOException {
|
||||
builder.startObject(WildcardQueryParser.NAME);
|
||||
if (boost == -1) {
|
||||
builder.field(name, wildcard);
|
||||
} else {
|
@ -17,34 +17,33 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.apache.lucene.index.Term;
|
||||
import org.apache.lucene.search.MultiTermQuery;
|
||||
import org.apache.lucene.search.Query;
|
||||
import org.apache.lucene.search.WildcardQuery;
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.codehaus.jackson.JsonToken;
|
||||
import org.elasticsearch.index.AbstractIndexComponent;
|
||||
import org.elasticsearch.index.Index;
|
||||
import org.elasticsearch.index.mapper.MapperService;
|
||||
import org.elasticsearch.index.query.QueryParsingException;
|
||||
import org.elasticsearch.index.settings.IndexSettings;
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.elasticsearch.util.settings.Settings;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import static org.elasticsearch.index.query.support.QueryParsers.*;
|
||||
|
||||
/**
|
||||
* @author kimchy (Shay Banon)
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class WildcardJsonQueryParser extends AbstractIndexComponent implements JsonQueryParser {
|
||||
public class WildcardQueryParser extends AbstractIndexComponent implements XContentQueryParser {
|
||||
|
||||
public static final String NAME = "wildcard";
|
||||
|
||||
@Inject public WildcardJsonQueryParser(Index index, @IndexSettings Settings settings) {
|
||||
@Inject public WildcardQueryParser(Index index, @IndexSettings Settings settings) {
|
||||
super(index, settings);
|
||||
}
|
||||
|
||||
@ -52,38 +51,34 @@ public class WildcardJsonQueryParser extends AbstractIndexComponent implements J
|
||||
return new String[]{NAME};
|
||||
}
|
||||
|
||||
@Override public Query parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
JsonParser jp = parseContext.jp();
|
||||
@Override public Query parse(QueryParseContext parseContext) throws IOException, QueryParsingException {
|
||||
XContentParser parser = parseContext.parser();
|
||||
|
||||
JsonToken token = jp.nextToken();
|
||||
assert token == JsonToken.FIELD_NAME;
|
||||
String fieldName = jp.getCurrentName();
|
||||
XContentParser.Token token = parser.nextToken();
|
||||
assert token == XContentParser.Token.FIELD_NAME;
|
||||
String fieldName = parser.currentName();
|
||||
|
||||
|
||||
String value = null;
|
||||
float boost = 1.0f;
|
||||
token = jp.nextToken();
|
||||
if (token == JsonToken.START_OBJECT) {
|
||||
token = parser.nextToken();
|
||||
if (token == XContentParser.Token.START_OBJECT) {
|
||||
String currentFieldName = null;
|
||||
while ((token = jp.nextToken()) != JsonToken.END_OBJECT) {
|
||||
if (token == JsonToken.FIELD_NAME) {
|
||||
currentFieldName = jp.getCurrentName();
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
|
||||
if (token == XContentParser.Token.FIELD_NAME) {
|
||||
currentFieldName = parser.currentName();
|
||||
} else {
|
||||
if ("wildcard".equals(currentFieldName)) {
|
||||
value = jp.getText();
|
||||
value = parser.text();
|
||||
} else if ("boost".equals(currentFieldName)) {
|
||||
if (token == JsonToken.VALUE_STRING) {
|
||||
boost = Float.parseFloat(jp.getText());
|
||||
} else {
|
||||
boost = jp.getFloatValue();
|
||||
}
|
||||
boost = parser.floatValue();
|
||||
}
|
||||
}
|
||||
}
|
||||
jp.nextToken();
|
||||
parser.nextToken();
|
||||
} else {
|
||||
value = jp.getText();
|
||||
jp.nextToken();
|
||||
value = parser.text();
|
||||
parser.nextToken();
|
||||
}
|
||||
|
||||
if (value == null) {
|
@ -17,11 +17,13 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.xcontent.ToXContent;
|
||||
|
||||
/**
|
||||
* @author kimchy (Shay Banon)
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public interface JsonSpanQueryBuilder extends JsonQueryBuilder {
|
||||
public interface XContentFilterBuilder extends ToXContent {
|
||||
|
||||
}
|
||||
}
|
@ -17,7 +17,7 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.apache.lucene.search.Filter;
|
||||
import org.elasticsearch.index.IndexComponent;
|
||||
@ -28,13 +28,16 @@ import java.io.IOException;
|
||||
/**
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public interface JsonFilterParser extends IndexComponent {
|
||||
public interface XContentFilterParser extends IndexComponent {
|
||||
|
||||
/**
|
||||
* The names this filter is registered under.
|
||||
*/
|
||||
String[] names();
|
||||
|
||||
/**
|
||||
* Parses the into a filter from the current json parser location. Will be at "START_OBJECT" location,
|
||||
* Parses the into a filter from the current parser location. Will be at "START_OBJECT" location,
|
||||
* and should end when the token is at the matching "END_OBJECT".
|
||||
*/
|
||||
Filter parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException;
|
||||
Filter parse(QueryParseContext parseContext) throws IOException, QueryParsingException;
|
||||
}
|
@ -17,14 +17,14 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.settings.Settings;
|
||||
|
||||
/**
|
||||
* @author kimchy (Shay Banon)
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public interface JsonFilterParserFactory {
|
||||
public interface XContentFilterParserFactory {
|
||||
|
||||
JsonFilterParser create(String name, Settings settings);
|
||||
XContentFilterParser create(String name, Settings settings);
|
||||
}
|
@ -0,0 +1,184 @@
|
||||
/*
|
||||
* Licensed to Elastic Search and Shay Banon under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. Elastic Search 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.index.query.xcontent;
|
||||
|
||||
import org.apache.lucene.search.Query;
|
||||
import org.elasticsearch.ElasticSearchException;
|
||||
import org.elasticsearch.index.AbstractIndexComponent;
|
||||
import org.elasticsearch.index.Index;
|
||||
import org.elasticsearch.index.analysis.AnalysisService;
|
||||
import org.elasticsearch.index.cache.IndexCache;
|
||||
import org.elasticsearch.index.mapper.MapperService;
|
||||
import org.elasticsearch.index.query.IndexQueryParser;
|
||||
import org.elasticsearch.index.query.QueryBuilder;
|
||||
import org.elasticsearch.index.query.QueryParsingException;
|
||||
import org.elasticsearch.index.settings.IndexSettings;
|
||||
import org.elasticsearch.index.similarity.SimilarityService;
|
||||
import org.elasticsearch.util.ThreadLocals;
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.elasticsearch.util.guice.inject.assistedinject.Assisted;
|
||||
import org.elasticsearch.util.io.FastByteArrayOutputStream;
|
||||
import org.elasticsearch.util.settings.Settings;
|
||||
import org.elasticsearch.util.xcontent.XContentFactory;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.elasticsearch.util.gcommon.collect.Lists.*;
|
||||
|
||||
/**
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class XContentIndexQueryParser extends AbstractIndexComponent implements IndexQueryParser {
|
||||
|
||||
public static final class Defaults {
|
||||
public static final String QUERY_PREFIX = "index.queryparser.query";
|
||||
public static final String FILTER_PREFIX = "index.queryparser.filter";
|
||||
}
|
||||
|
||||
private ThreadLocal<ThreadLocals.CleanableValue<QueryParseContext>> cache = new ThreadLocal<ThreadLocals.CleanableValue<QueryParseContext>>() {
|
||||
@Override protected ThreadLocals.CleanableValue<QueryParseContext> initialValue() {
|
||||
return new ThreadLocals.CleanableValue<QueryParseContext>(new QueryParseContext(index, queryParserRegistry, mapperService, similarityService, indexCache));
|
||||
}
|
||||
};
|
||||
|
||||
private final String name;
|
||||
|
||||
private final MapperService mapperService;
|
||||
|
||||
private final SimilarityService similarityService;
|
||||
|
||||
private final IndexCache indexCache;
|
||||
|
||||
private final XContentQueryParserRegistry queryParserRegistry;
|
||||
|
||||
@Inject public XContentIndexQueryParser(Index index,
|
||||
@IndexSettings Settings indexSettings,
|
||||
MapperService mapperService, IndexCache indexCache,
|
||||
AnalysisService analysisService, @Nullable SimilarityService similarityService,
|
||||
@Nullable Map<String, XContentQueryParserFactory> namedQueryParsers,
|
||||
@Nullable Map<String, XContentFilterParserFactory> namedFilterParsers,
|
||||
@Assisted String name, @Assisted @Nullable Settings settings) {
|
||||
super(index, indexSettings);
|
||||
this.name = name;
|
||||
this.mapperService = mapperService;
|
||||
this.similarityService = similarityService;
|
||||
this.indexCache = indexCache;
|
||||
|
||||
List<XContentQueryParser> queryParsers = newArrayList();
|
||||
if (namedQueryParsers != null) {
|
||||
Map<String, Settings> queryParserGroups = indexSettings.getGroups(XContentIndexQueryParser.Defaults.QUERY_PREFIX);
|
||||
for (Map.Entry<String, XContentQueryParserFactory> entry : namedQueryParsers.entrySet()) {
|
||||
String queryParserName = entry.getKey();
|
||||
XContentQueryParserFactory queryParserFactory = entry.getValue();
|
||||
Settings queryParserSettings = queryParserGroups.get(queryParserName);
|
||||
|
||||
queryParsers.add(queryParserFactory.create(queryParserName, queryParserSettings));
|
||||
}
|
||||
}
|
||||
|
||||
List<XContentFilterParser> filterParsers = newArrayList();
|
||||
if (namedFilterParsers != null) {
|
||||
Map<String, Settings> filterParserGroups = indexSettings.getGroups(XContentIndexQueryParser.Defaults.FILTER_PREFIX);
|
||||
for (Map.Entry<String, XContentFilterParserFactory> entry : namedFilterParsers.entrySet()) {
|
||||
String filterParserName = entry.getKey();
|
||||
XContentFilterParserFactory filterParserFactory = entry.getValue();
|
||||
Settings filterParserSettings = filterParserGroups.get(filterParserName);
|
||||
|
||||
filterParsers.add(filterParserFactory.create(filterParserName, filterParserSettings));
|
||||
}
|
||||
}
|
||||
|
||||
this.queryParserRegistry = new XContentQueryParserRegistry(index, indexSettings, analysisService, queryParsers, filterParsers);
|
||||
}
|
||||
|
||||
@Override public String name() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
public XContentQueryParserRegistry queryParserRegistry() {
|
||||
return this.queryParserRegistry;
|
||||
}
|
||||
|
||||
@Override public Query parse(QueryBuilder queryBuilder) throws ElasticSearchException {
|
||||
XContentParser parser = null;
|
||||
try {
|
||||
FastByteArrayOutputStream unsafeBytes = queryBuilder.buildAsUnsafeBytes();
|
||||
parser = XContentFactory.xContent(unsafeBytes.unsafeByteArray(), 0, unsafeBytes.size()).createParser(unsafeBytes.unsafeByteArray(), 0, unsafeBytes.size());
|
||||
return parse(cache.get().get(), parser);
|
||||
} catch (QueryParsingException e) {
|
||||
throw e;
|
||||
} catch (Exception e) {
|
||||
throw new QueryParsingException(index, "Failed to parse", e);
|
||||
} finally {
|
||||
if (parser != null) {
|
||||
parser.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override public Query parse(byte[] source) throws ElasticSearchException {
|
||||
XContentParser parser = null;
|
||||
try {
|
||||
parser = XContentFactory.xContent(source).createParser(source);
|
||||
return parse(cache.get().get(), parser);
|
||||
} catch (QueryParsingException e) {
|
||||
throw e;
|
||||
} catch (Exception e) {
|
||||
throw new QueryParsingException(index, "Failed to parse", e);
|
||||
} finally {
|
||||
if (parser != null) {
|
||||
parser.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override public Query parse(String source) throws QueryParsingException {
|
||||
XContentParser parser = null;
|
||||
try {
|
||||
parser = XContentFactory.xContent(source).createParser(source);
|
||||
return parse(cache.get().get(), parser);
|
||||
} catch (QueryParsingException e) {
|
||||
throw e;
|
||||
} catch (Exception e) {
|
||||
throw new QueryParsingException(index, "Failed to parse [" + source + "]", e);
|
||||
} finally {
|
||||
if (parser != null) {
|
||||
parser.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Query parse(XContentParser parser) {
|
||||
try {
|
||||
return parse(cache.get().get(), parser);
|
||||
} catch (IOException e) {
|
||||
throw new QueryParsingException(index, "Failed to parse", e);
|
||||
}
|
||||
}
|
||||
|
||||
private Query parse(QueryParseContext parseContext, XContentParser parser) throws IOException, QueryParsingException {
|
||||
parseContext.reset(parser);
|
||||
return parseContext.parseInnerQuery();
|
||||
}
|
||||
}
|
@ -17,14 +17,14 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.index.query.QueryBuilder;
|
||||
import org.elasticsearch.util.json.ToJson;
|
||||
import org.elasticsearch.util.xcontent.ToXContent;
|
||||
|
||||
/**
|
||||
* @author kimchy (Shay Banon)
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public interface JsonQueryBuilder extends QueryBuilder, ToJson {
|
||||
public interface XContentQueryBuilder extends QueryBuilder, ToXContent {
|
||||
|
||||
}
|
@ -17,7 +17,7 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.apache.lucene.search.Query;
|
||||
import org.elasticsearch.index.IndexComponent;
|
||||
@ -28,13 +28,16 @@ import java.io.IOException;
|
||||
/**
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public interface JsonQueryParser extends IndexComponent {
|
||||
public interface XContentQueryParser extends IndexComponent {
|
||||
|
||||
/**
|
||||
* The names this query parser is registered under.
|
||||
*/
|
||||
String[] names();
|
||||
|
||||
/**
|
||||
* Parses the into a query from the current json parser location. Will be at "START_OBJECT" location,
|
||||
* Parses the into a query from the current parser location. Will be at "START_OBJECT" location,
|
||||
* and should end when the token is at the matching "END_OBJECT".
|
||||
*/
|
||||
Query parse(JsonQueryParseContext parseContext) throws IOException, QueryParsingException;
|
||||
Query parse(QueryParseContext parseContext) throws IOException, QueryParsingException;
|
||||
}
|
@ -17,14 +17,14 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.settings.Settings;
|
||||
|
||||
/**
|
||||
* @author kimchy (Shay Banon)
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public interface JsonQueryParserFactory {
|
||||
public interface XContentQueryParserFactory {
|
||||
|
||||
JsonQueryParser create(String name, Settings settings);
|
||||
XContentQueryParser create(String name, Settings settings);
|
||||
}
|
@ -0,0 +1,116 @@
|
||||
/*
|
||||
* Licensed to Elastic Search and Shay Banon under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. Elastic Search 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.index.query.xcontent;
|
||||
|
||||
import org.elasticsearch.util.gcommon.collect.ImmutableMap;
|
||||
import org.apache.lucene.util.StringHelper;
|
||||
import org.elasticsearch.index.Index;
|
||||
import org.elasticsearch.index.analysis.AnalysisService;
|
||||
import org.elasticsearch.index.settings.IndexSettings;
|
||||
import org.elasticsearch.util.settings.Settings;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.elasticsearch.util.gcommon.collect.Maps.*;
|
||||
|
||||
/**
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class XContentQueryParserRegistry {
|
||||
|
||||
private final Map<String, XContentQueryParser> queryParsers;
|
||||
|
||||
private final Map<String, XContentFilterParser> filterParsers;
|
||||
|
||||
public XContentQueryParserRegistry(Index index,
|
||||
@IndexSettings Settings indexSettings,
|
||||
AnalysisService analysisService,
|
||||
@Nullable Iterable<XContentQueryParser> queryParsers,
|
||||
@Nullable Iterable<XContentFilterParser> filterParsers) {
|
||||
|
||||
Map<String, XContentQueryParser> queryParsersMap = newHashMap();
|
||||
// add defaults
|
||||
add(queryParsersMap, new DisMaxQueryParser(index, indexSettings));
|
||||
add(queryParsersMap, new MatchAllQueryParser(index, indexSettings));
|
||||
add(queryParsersMap, new QueryStringQueryParser(index, indexSettings, analysisService));
|
||||
add(queryParsersMap, new BoolQueryParser(index, indexSettings));
|
||||
add(queryParsersMap, new TermQueryParser(index, indexSettings));
|
||||
add(queryParsersMap, new FieldQueryParser(index, indexSettings, analysisService));
|
||||
add(queryParsersMap, new RangeQueryParser(index, indexSettings));
|
||||
add(queryParsersMap, new PrefixQueryParser(index, indexSettings));
|
||||
add(queryParsersMap, new WildcardQueryParser(index, indexSettings));
|
||||
add(queryParsersMap, new FilteredQueryParser(index, indexSettings));
|
||||
add(queryParsersMap, new ConstantScoreQueryParser(index, indexSettings));
|
||||
add(queryParsersMap, new SpanTermQueryParser(index, indexSettings));
|
||||
add(queryParsersMap, new SpanNotQueryParser(index, indexSettings));
|
||||
add(queryParsersMap, new SpanFirstQueryParser(index, indexSettings));
|
||||
add(queryParsersMap, new SpanNearQueryParser(index, indexSettings));
|
||||
add(queryParsersMap, new SpanOrQueryParser(index, indexSettings));
|
||||
add(queryParsersMap, new MoreLikeThisQueryParser(index, indexSettings));
|
||||
add(queryParsersMap, new MoreLikeThisFieldQueryParser(index, indexSettings));
|
||||
add(queryParsersMap, new FuzzyLikeThisQueryParser(index, indexSettings));
|
||||
add(queryParsersMap, new FuzzyLikeThisFieldQueryParser(index, indexSettings));
|
||||
|
||||
// now, copy over the ones provided
|
||||
if (queryParsers != null) {
|
||||
for (XContentQueryParser queryParser : queryParsers) {
|
||||
add(queryParsersMap, queryParser);
|
||||
}
|
||||
}
|
||||
this.queryParsers = ImmutableMap.copyOf(queryParsersMap);
|
||||
|
||||
Map<String, XContentFilterParser> filterParsersMap = newHashMap();
|
||||
// add defaults
|
||||
add(filterParsersMap, new TermFilterParser(index, indexSettings));
|
||||
add(filterParsersMap, new TermsFilterParser(index, indexSettings));
|
||||
add(filterParsersMap, new RangeFilterParser(index, indexSettings));
|
||||
add(filterParsersMap, new PrefixFilterParser(index, indexSettings));
|
||||
add(filterParsersMap, new QueryFilterParser(index, indexSettings));
|
||||
add(filterParsersMap, new BoolFilterParser(index, indexSettings));
|
||||
|
||||
if (filterParsers != null) {
|
||||
for (XContentFilterParser filterParser : filterParsers) {
|
||||
add(filterParsersMap, filterParser);
|
||||
}
|
||||
}
|
||||
this.filterParsers = ImmutableMap.copyOf(filterParsersMap);
|
||||
}
|
||||
|
||||
public XContentQueryParser queryParser(String name) {
|
||||
return queryParsers.get(name);
|
||||
}
|
||||
|
||||
public XContentFilterParser filterParser(String name) {
|
||||
return filterParsers.get(name);
|
||||
}
|
||||
|
||||
private void add(Map<String, XContentFilterParser> map, XContentFilterParser filterParser) {
|
||||
for (String name : filterParser.names()) {
|
||||
map.put(StringHelper.intern(name), filterParser);
|
||||
}
|
||||
}
|
||||
|
||||
private void add(Map<String, XContentQueryParser> map, XContentQueryParser queryParser) {
|
||||
for (String name : queryParser.names()) {
|
||||
map.put(StringHelper.intern(name), queryParser);
|
||||
}
|
||||
}
|
||||
}
|
@ -17,13 +17,11 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
|
||||
import org.elasticsearch.util.json.ToJson;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
/**
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public interface JsonFilterBuilder extends ToJson {
|
||||
public interface XContentSpanQueryBuilder extends XContentQueryBuilder {
|
||||
|
||||
}
|
||||
}
|
@ -19,6 +19,8 @@
|
||||
|
||||
package org.elasticsearch.rest.action.search;
|
||||
|
||||
import org.elasticsearch.index.query.xcontent.QueryBuilders;
|
||||
import org.elasticsearch.index.query.xcontent.QueryStringQueryBuilder;
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.elasticsearch.ElasticSearchIllegalArgumentException;
|
||||
import org.elasticsearch.action.ActionListener;
|
||||
@ -26,8 +28,6 @@ import org.elasticsearch.action.search.SearchOperationThreading;
|
||||
import org.elasticsearch.action.search.SearchRequest;
|
||||
import org.elasticsearch.action.search.SearchResponse;
|
||||
import org.elasticsearch.client.Client;
|
||||
import org.elasticsearch.index.query.json.JsonQueryBuilders;
|
||||
import org.elasticsearch.index.query.json.QueryStringJsonQueryBuilder;
|
||||
import org.elasticsearch.rest.*;
|
||||
import org.elasticsearch.rest.action.support.RestActions;
|
||||
import org.elasticsearch.search.Scroll;
|
||||
@ -149,15 +149,15 @@ public class RestSearchAction extends BaseRestHandler {
|
||||
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
|
||||
String queryString = request.param("q");
|
||||
if (queryString != null) {
|
||||
QueryStringJsonQueryBuilder queryBuilder = JsonQueryBuilders.queryString(queryString);
|
||||
QueryStringQueryBuilder queryBuilder = QueryBuilders.queryString(queryString);
|
||||
queryBuilder.defaultField(request.param("df"));
|
||||
queryBuilder.analyzer(request.param("analyzer"));
|
||||
String defaultOperator = request.param("default_operator");
|
||||
if (defaultOperator != null) {
|
||||
if ("OR".equals(defaultOperator)) {
|
||||
queryBuilder.defaultOperator(QueryStringJsonQueryBuilder.Operator.OR);
|
||||
queryBuilder.defaultOperator(QueryStringQueryBuilder.Operator.OR);
|
||||
} else if ("AND".equals(defaultOperator)) {
|
||||
queryBuilder.defaultOperator(QueryStringJsonQueryBuilder.Operator.AND);
|
||||
queryBuilder.defaultOperator(QueryStringQueryBuilder.Operator.AND);
|
||||
} else {
|
||||
throw new ElasticSearchIllegalArgumentException("Unsupported defaultOperator [" + defaultOperator + "], can either be [OR] or [AND]");
|
||||
}
|
||||
|
@ -22,8 +22,8 @@ package org.elasticsearch.rest.action.support;
|
||||
import org.elasticsearch.ElasticSearchIllegalArgumentException;
|
||||
import org.elasticsearch.action.ShardOperationFailedException;
|
||||
import org.elasticsearch.action.support.broadcast.BroadcastOperationResponse;
|
||||
import org.elasticsearch.index.query.json.JsonQueryBuilders;
|
||||
import org.elasticsearch.index.query.json.QueryStringJsonQueryBuilder;
|
||||
import org.elasticsearch.index.query.xcontent.QueryBuilders;
|
||||
import org.elasticsearch.index.query.xcontent.QueryStringQueryBuilder;
|
||||
import org.elasticsearch.rest.RestRequest;
|
||||
import org.elasticsearch.util.Strings;
|
||||
import org.elasticsearch.util.Unicode;
|
||||
@ -76,15 +76,15 @@ public class RestActions {
|
||||
if (queryString == null) {
|
||||
throw new ElasticSearchIllegalArgumentException("No query to execute, not in body, and not bounded to 'q' parameter");
|
||||
}
|
||||
QueryStringJsonQueryBuilder queryBuilder = JsonQueryBuilders.queryString(queryString);
|
||||
QueryStringQueryBuilder queryBuilder = QueryBuilders.queryString(queryString);
|
||||
queryBuilder.defaultField(request.param("df"));
|
||||
queryBuilder.analyzer(request.param("analyzer"));
|
||||
String defaultOperator = request.param("default_operator");
|
||||
if (defaultOperator != null) {
|
||||
if ("OR".equals(defaultOperator)) {
|
||||
queryBuilder.defaultOperator(QueryStringJsonQueryBuilder.Operator.OR);
|
||||
queryBuilder.defaultOperator(QueryStringQueryBuilder.Operator.OR);
|
||||
} else if ("AND".equals(defaultOperator)) {
|
||||
queryBuilder.defaultOperator(QueryStringJsonQueryBuilder.Operator.AND);
|
||||
queryBuilder.defaultOperator(QueryStringQueryBuilder.Operator.AND);
|
||||
} else {
|
||||
throw new ElasticSearchIllegalArgumentException("Unsupported defaultOperator [" + defaultOperator + "], can either be [OR] or [AND]");
|
||||
}
|
||||
|
@ -21,11 +21,12 @@ package org.elasticsearch.search;
|
||||
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.elasticsearch.search.internal.SearchContext;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
/**
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public interface SearchParseElement {
|
||||
|
||||
void parse(JsonParser jp, SearchContext context) throws Exception;
|
||||
void parse(XContentParser parser, SearchContext context) throws Exception;
|
||||
}
|
||||
|
@ -19,12 +19,7 @@
|
||||
|
||||
package org.elasticsearch.search;
|
||||
|
||||
import org.elasticsearch.util.gcommon.collect.ImmutableMap;
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.apache.lucene.search.TopDocs;
|
||||
import org.codehaus.jackson.JsonFactory;
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.codehaus.jackson.JsonToken;
|
||||
import org.elasticsearch.ElasticSearchException;
|
||||
import org.elasticsearch.cluster.ClusterService;
|
||||
import org.elasticsearch.index.Index;
|
||||
@ -53,10 +48,13 @@ import org.elasticsearch.util.TimeValue;
|
||||
import org.elasticsearch.util.Unicode;
|
||||
import org.elasticsearch.util.component.AbstractLifecycleComponent;
|
||||
import org.elasticsearch.util.concurrent.highscalelib.NonBlockingHashMapLong;
|
||||
import org.elasticsearch.util.json.Jackson;
|
||||
import org.elasticsearch.util.gcommon.collect.ImmutableMap;
|
||||
import org.elasticsearch.util.guice.inject.Inject;
|
||||
import org.elasticsearch.util.settings.Settings;
|
||||
import org.elasticsearch.util.timer.Timeout;
|
||||
import org.elasticsearch.util.timer.TimerTask;
|
||||
import org.elasticsearch.util.xcontent.XContentFactory;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
@ -71,8 +69,6 @@ import static org.elasticsearch.util.TimeValue.*;
|
||||
*/
|
||||
public class SearchService extends AbstractLifecycleComponent<SearchService> {
|
||||
|
||||
private final JsonFactory jsonFactory = Jackson.defaultJsonFactory();
|
||||
|
||||
private final ClusterService clusterService;
|
||||
|
||||
private final IndicesService indicesService;
|
||||
@ -339,17 +335,17 @@ public class SearchService extends AbstractLifecycleComponent<SearchService> {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
JsonParser jp = jsonFactory.createJsonParser(source);
|
||||
JsonToken token;
|
||||
while ((token = jp.nextToken()) != JsonToken.END_OBJECT) {
|
||||
if (token == JsonToken.FIELD_NAME) {
|
||||
String fieldName = jp.getCurrentName();
|
||||
jp.nextToken();
|
||||
XContentParser parser = XContentFactory.xContent(source).createParser(source);
|
||||
XContentParser.Token token;
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
|
||||
if (token == XContentParser.Token.FIELD_NAME) {
|
||||
String fieldName = parser.currentName();
|
||||
parser.nextToken();
|
||||
SearchParseElement element = elementParsers.get(fieldName);
|
||||
if (element == null) {
|
||||
throw new SearchParseException(context, "No parser for element [" + fieldName + "]");
|
||||
}
|
||||
element.parse(jp, context);
|
||||
element.parse(parser, context);
|
||||
} else if (token == null) {
|
||||
break;
|
||||
}
|
||||
|
@ -19,18 +19,19 @@
|
||||
|
||||
package org.elasticsearch.search.builder;
|
||||
|
||||
import org.elasticsearch.index.query.json.JsonQueryBuilder;
|
||||
import org.elasticsearch.index.query.xcontent.XContentQueryBuilder;
|
||||
import org.elasticsearch.search.SearchException;
|
||||
import org.elasticsearch.util.gnu.trove.TObjectFloatHashMap;
|
||||
import org.elasticsearch.util.gnu.trove.TObjectFloatIterator;
|
||||
import org.elasticsearch.util.json.JsonBuilder;
|
||||
import org.elasticsearch.util.json.ToJson;
|
||||
import org.elasticsearch.util.xcontent.ToXContent;
|
||||
import org.elasticsearch.util.xcontent.XContentFactory;
|
||||
import org.elasticsearch.util.xcontent.XContentType;
|
||||
import org.elasticsearch.util.xcontent.builder.XContentBuilder;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static org.elasticsearch.util.gcommon.collect.Lists.*;
|
||||
import static org.elasticsearch.util.json.JsonBuilder.*;
|
||||
|
||||
/**
|
||||
* A search source builder allowing to easily build search source. Simple construction
|
||||
@ -67,7 +68,7 @@ public class SearchSourceBuilder {
|
||||
return new SearchSourceHighlightBuilder();
|
||||
}
|
||||
|
||||
private JsonQueryBuilder queryBuilder;
|
||||
private XContentQueryBuilder queryBuilder;
|
||||
|
||||
private int from = -1;
|
||||
|
||||
@ -97,9 +98,9 @@ public class SearchSourceBuilder {
|
||||
/**
|
||||
* Constructs a new search source builder with a search query.
|
||||
*
|
||||
* @see org.elasticsearch.index.query.json.JsonQueryBuilders
|
||||
* @see org.elasticsearch.index.query.xcontent.QueryBuilders
|
||||
*/
|
||||
public SearchSourceBuilder query(JsonQueryBuilder query) {
|
||||
public SearchSourceBuilder query(XContentQueryBuilder query) {
|
||||
this.queryBuilder = query;
|
||||
return this;
|
||||
}
|
||||
@ -255,9 +256,11 @@ public class SearchSourceBuilder {
|
||||
|
||||
public byte[] build() throws SearchException {
|
||||
try {
|
||||
JsonBuilder builder = binaryJsonBuilder();
|
||||
XContentBuilder builder = XContentFactory.contentBuilder(XContentType.JSON);
|
||||
builder.startObject();
|
||||
|
||||
ToXContent.Params params = ToXContent.EMPTY_PARAMS;
|
||||
|
||||
if (from != -1) {
|
||||
builder.field("from", from);
|
||||
}
|
||||
@ -270,7 +273,7 @@ public class SearchSourceBuilder {
|
||||
|
||||
if (queryBuilder != null) {
|
||||
builder.field("query");
|
||||
queryBuilder.toJson(builder, ToJson.EMPTY_PARAMS);
|
||||
queryBuilder.toXContent(builder, params);
|
||||
}
|
||||
|
||||
if (explain != null) {
|
||||
@ -316,11 +319,11 @@ public class SearchSourceBuilder {
|
||||
}
|
||||
|
||||
if (facetsBuilder != null) {
|
||||
facetsBuilder.toJson(builder, ToJson.EMPTY_PARAMS);
|
||||
facetsBuilder.toXContent(builder, params);
|
||||
}
|
||||
|
||||
if (highlightBuilder != null) {
|
||||
highlightBuilder.toJson(builder, ToJson.EMPTY_PARAMS);
|
||||
highlightBuilder.toXContent(builder, params);
|
||||
}
|
||||
|
||||
builder.endObject();
|
||||
|
@ -19,9 +19,9 @@
|
||||
|
||||
package org.elasticsearch.search.builder;
|
||||
|
||||
import org.elasticsearch.index.query.json.JsonQueryBuilder;
|
||||
import org.elasticsearch.util.json.JsonBuilder;
|
||||
import org.elasticsearch.util.json.ToJson;
|
||||
import org.elasticsearch.index.query.xcontent.XContentQueryBuilder;
|
||||
import org.elasticsearch.util.xcontent.ToXContent;
|
||||
import org.elasticsearch.util.xcontent.builder.XContentBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
@ -34,7 +34,7 @@ import static org.elasticsearch.util.gcommon.collect.Lists.*;
|
||||
* @author kimchy (shay.banon)
|
||||
* @see SearchSourceBuilder#facets(SearchSourceFacetsBuilder)
|
||||
*/
|
||||
public class SearchSourceFacetsBuilder implements ToJson {
|
||||
public class SearchSourceFacetsBuilder implements ToXContent {
|
||||
|
||||
private String queryExecution;
|
||||
|
||||
@ -54,7 +54,7 @@ public class SearchSourceFacetsBuilder implements ToJson {
|
||||
* @param name The logical name of the facet, it will be returned under the name
|
||||
* @param query The query facet
|
||||
*/
|
||||
public SearchSourceFacetsBuilder facet(String name, JsonQueryBuilder query) {
|
||||
public SearchSourceFacetsBuilder facet(String name, XContentQueryBuilder query) {
|
||||
if (queryFacets == null) {
|
||||
queryFacets = newArrayListWithCapacity(2);
|
||||
}
|
||||
@ -69,7 +69,7 @@ public class SearchSourceFacetsBuilder implements ToJson {
|
||||
* @param name The logical name of the facet, it will be returned under the name
|
||||
* @param query The query facet
|
||||
*/
|
||||
public SearchSourceFacetsBuilder facet(String name, JsonQueryBuilder query, boolean global) {
|
||||
public SearchSourceFacetsBuilder facet(String name, XContentQueryBuilder query, boolean global) {
|
||||
if (queryFacets == null) {
|
||||
queryFacets = newArrayListWithCapacity(2);
|
||||
}
|
||||
@ -77,7 +77,7 @@ public class SearchSourceFacetsBuilder implements ToJson {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override public void toJson(JsonBuilder builder, Params params) throws IOException {
|
||||
@Override public void toXContent(XContentBuilder builder, Params params) throws IOException {
|
||||
if (queryExecution == null && queryFacets == null) {
|
||||
return;
|
||||
}
|
||||
@ -92,7 +92,7 @@ public class SearchSourceFacetsBuilder implements ToJson {
|
||||
for (FacetQuery facetQuery : queryFacets) {
|
||||
builder.startObject(facetQuery.name());
|
||||
builder.field("query");
|
||||
facetQuery.queryBuilder().toJson(builder, params);
|
||||
facetQuery.queryBuilder().toXContent(builder, params);
|
||||
if (facetQuery.global() != null) {
|
||||
builder.field("global", facetQuery.global());
|
||||
}
|
||||
@ -105,10 +105,10 @@ public class SearchSourceFacetsBuilder implements ToJson {
|
||||
|
||||
private static class FacetQuery {
|
||||
private final String name;
|
||||
private final JsonQueryBuilder queryBuilder;
|
||||
private final XContentQueryBuilder queryBuilder;
|
||||
private final Boolean global;
|
||||
|
||||
private FacetQuery(String name, JsonQueryBuilder queryBuilder, Boolean global) {
|
||||
private FacetQuery(String name, XContentQueryBuilder queryBuilder, Boolean global) {
|
||||
this.name = name;
|
||||
this.queryBuilder = queryBuilder;
|
||||
this.global = global;
|
||||
@ -118,7 +118,7 @@ public class SearchSourceFacetsBuilder implements ToJson {
|
||||
return name;
|
||||
}
|
||||
|
||||
public JsonQueryBuilder queryBuilder() {
|
||||
public XContentQueryBuilder queryBuilder() {
|
||||
return queryBuilder;
|
||||
}
|
||||
|
||||
|
@ -19,8 +19,8 @@
|
||||
|
||||
package org.elasticsearch.search.builder;
|
||||
|
||||
import org.elasticsearch.util.json.JsonBuilder;
|
||||
import org.elasticsearch.util.json.ToJson;
|
||||
import org.elasticsearch.util.xcontent.ToXContent;
|
||||
import org.elasticsearch.util.xcontent.builder.XContentBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
@ -33,7 +33,7 @@ import static org.elasticsearch.util.gcommon.collect.Lists.*;
|
||||
* @author kimchy (shay.banon)
|
||||
* @see SearchSourceBuilder#highlight()
|
||||
*/
|
||||
public class SearchSourceHighlightBuilder implements ToJson {
|
||||
public class SearchSourceHighlightBuilder implements ToXContent {
|
||||
|
||||
private List<Field> fields;
|
||||
|
||||
@ -127,7 +127,7 @@ public class SearchSourceHighlightBuilder implements ToJson {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override public void toJson(JsonBuilder builder, Params params) throws IOException {
|
||||
@Override public void toXContent(XContentBuilder builder, Params params) throws IOException {
|
||||
builder.startObject("highlight");
|
||||
if (tagsSchema != null) {
|
||||
builder.field("tags_schema", tagsSchema);
|
||||
|
@ -19,15 +19,13 @@
|
||||
|
||||
package org.elasticsearch.search.facets;
|
||||
|
||||
import org.elasticsearch.util.gcommon.collect.Lists;
|
||||
import org.apache.lucene.search.Query;
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.codehaus.jackson.JsonToken;
|
||||
import org.elasticsearch.index.query.json.JsonIndexQueryParser;
|
||||
import org.elasticsearch.index.query.xcontent.XContentIndexQueryParser;
|
||||
import org.elasticsearch.search.SearchParseElement;
|
||||
import org.elasticsearch.search.SearchParseException;
|
||||
import org.elasticsearch.search.internal.SearchContext;
|
||||
import org.elasticsearch.util.Booleans;
|
||||
import org.elasticsearch.util.gcommon.collect.Lists;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ -46,17 +44,17 @@ import java.util.List;
|
||||
*/
|
||||
public class FacetsParseElement implements SearchParseElement {
|
||||
|
||||
@Override public void parse(JsonParser jp, SearchContext context) throws Exception {
|
||||
JsonToken token;
|
||||
@Override public void parse(XContentParser parser, SearchContext context) throws Exception {
|
||||
XContentParser.Token token;
|
||||
SearchContextFacets.QueryExecutionType queryExecutionType = SearchContextFacets.QueryExecutionType.COLLECT;
|
||||
List<SearchContextFacets.QueryFacet> queryFacets = null;
|
||||
String topLevelFieldName = null;
|
||||
while ((token = jp.nextToken()) != JsonToken.END_OBJECT) {
|
||||
if (token == JsonToken.FIELD_NAME) {
|
||||
topLevelFieldName = jp.getCurrentName();
|
||||
} else if (token == JsonToken.VALUE_STRING) {
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
|
||||
if (token == XContentParser.Token.FIELD_NAME) {
|
||||
topLevelFieldName = parser.currentName();
|
||||
} else if (token == XContentParser.Token.VALUE_STRING) {
|
||||
if ("query_execution".equals(topLevelFieldName) || "queryExecution".equals(topLevelFieldName)) {
|
||||
String text = jp.getText();
|
||||
String text = parser.text();
|
||||
if ("collect".equals(text)) {
|
||||
queryExecutionType = SearchContextFacets.QueryExecutionType.COLLECT;
|
||||
} else if ("idset".equals(text)) {
|
||||
@ -65,31 +63,27 @@ public class FacetsParseElement implements SearchParseElement {
|
||||
throw new SearchParseException(context, "Unsupported query type [" + text + "]");
|
||||
}
|
||||
}
|
||||
} else if (token == JsonToken.START_OBJECT) {
|
||||
} else if (token == XContentParser.Token.START_OBJECT) {
|
||||
SearchContextFacets.Facet facet = null;
|
||||
boolean global = false;
|
||||
String facetFieldName = null;
|
||||
while ((token = jp.nextToken()) != JsonToken.END_OBJECT) {
|
||||
if (token == JsonToken.FIELD_NAME) {
|
||||
facetFieldName = jp.getCurrentName();
|
||||
} else if (token == JsonToken.START_OBJECT) {
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
|
||||
if (token == XContentParser.Token.FIELD_NAME) {
|
||||
facetFieldName = parser.currentName();
|
||||
} else if (token == XContentParser.Token.START_OBJECT) {
|
||||
if ("query".equals(facetFieldName)) {
|
||||
JsonIndexQueryParser indexQueryParser = (JsonIndexQueryParser) context.queryParser();
|
||||
Query facetQuery = indexQueryParser.parse(jp);
|
||||
XContentIndexQueryParser indexQueryParser = (XContentIndexQueryParser) context.queryParser();
|
||||
Query facetQuery = indexQueryParser.parse(parser);
|
||||
facet = new SearchContextFacets.QueryFacet(topLevelFieldName, facetQuery);
|
||||
if (queryFacets == null) {
|
||||
queryFacets = Lists.newArrayListWithCapacity(2);
|
||||
}
|
||||
queryFacets.add((SearchContextFacets.QueryFacet) facet);
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_TRUE) {
|
||||
} else if (token.isValue()) {
|
||||
if ("global".equals(facetFieldName)) {
|
||||
global = true;
|
||||
global = parser.booleanValue();
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_NUMBER_INT) {
|
||||
global = jp.getIntValue() != 0;
|
||||
} else if (token == JsonToken.VALUE_STRING) {
|
||||
global = Booleans.parseBoolean(jp.getText(), global);
|
||||
}
|
||||
}
|
||||
if (facet == null) {
|
||||
|
@ -19,24 +19,19 @@
|
||||
|
||||
package org.elasticsearch.search.fetch;
|
||||
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.codehaus.jackson.JsonToken;
|
||||
import org.elasticsearch.search.SearchParseElement;
|
||||
import org.elasticsearch.search.internal.SearchContext;
|
||||
import org.elasticsearch.util.Booleans;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
/**
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class ExplainParseElement implements SearchParseElement {
|
||||
|
||||
@Override public void parse(JsonParser jp, SearchContext context) throws Exception {
|
||||
if (jp.getCurrentToken() == JsonToken.VALUE_NUMBER_INT) {
|
||||
context.explain(jp.getIntValue() != 0);
|
||||
} else if (jp.getCurrentToken() == JsonToken.VALUE_STRING) {
|
||||
context.explain(Booleans.parseBoolean(jp.getText(), context.explain()));
|
||||
} else {
|
||||
context.explain(jp.getCurrentToken() == JsonToken.VALUE_TRUE);
|
||||
@Override public void parse(XContentParser parser, SearchContext context) throws Exception {
|
||||
XContentParser.Token token = parser.currentToken();
|
||||
if (token.isValue()) {
|
||||
context.explain(parser.booleanValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -19,33 +19,32 @@
|
||||
|
||||
package org.elasticsearch.search.fetch;
|
||||
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.codehaus.jackson.JsonToken;
|
||||
import org.elasticsearch.search.SearchParseElement;
|
||||
import org.elasticsearch.search.internal.SearchContext;
|
||||
import org.elasticsearch.util.Strings;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* @author kimchy (Shay Banon)
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class FieldsParseElement implements SearchParseElement {
|
||||
|
||||
@Override public void parse(JsonParser jp, SearchContext context) throws Exception {
|
||||
JsonToken token = jp.getCurrentToken();
|
||||
if (token == JsonToken.START_ARRAY) {
|
||||
@Override public void parse(XContentParser parser, SearchContext context) throws Exception {
|
||||
XContentParser.Token token = parser.currentToken();
|
||||
if (token == XContentParser.Token.START_ARRAY) {
|
||||
ArrayList<String> fieldNames = new ArrayList<String>();
|
||||
while ((token = jp.nextToken()) != JsonToken.END_ARRAY) {
|
||||
fieldNames.add(jp.getText());
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
|
||||
fieldNames.add(parser.text());
|
||||
}
|
||||
if (fieldNames.isEmpty()) {
|
||||
context.fieldNames(Strings.EMPTY_ARRAY);
|
||||
} else {
|
||||
context.fieldNames(fieldNames.toArray(new String[fieldNames.size()]));
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_STRING) {
|
||||
context.fieldNames(new String[]{jp.getText()});
|
||||
} else if (token == XContentParser.Token.VALUE_STRING) {
|
||||
context.fieldNames(new String[]{parser.text()});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -19,13 +19,11 @@
|
||||
|
||||
package org.elasticsearch.search.highlight;
|
||||
|
||||
import org.elasticsearch.util.gcommon.collect.Lists;
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.codehaus.jackson.JsonToken;
|
||||
import org.elasticsearch.search.SearchParseElement;
|
||||
import org.elasticsearch.search.SearchParseException;
|
||||
import org.elasticsearch.search.internal.SearchContext;
|
||||
import org.elasticsearch.util.Booleans;
|
||||
import org.elasticsearch.util.gcommon.collect.Lists;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ -61,79 +59,61 @@ public class HighlighterParseElement implements SearchParseElement {
|
||||
public static final String[] STYLED_POST_TAGS = {"</em>"};
|
||||
|
||||
|
||||
@Override public void parse(JsonParser jp, SearchContext context) throws Exception {
|
||||
JsonToken token;
|
||||
@Override public void parse(XContentParser parser, SearchContext context) throws Exception {
|
||||
XContentParser.Token token;
|
||||
String topLevelFieldName = null;
|
||||
List<SearchContextHighlight.ParsedHighlightField> fields = newArrayList();
|
||||
String[] preTags = DEFAULT_PRE_TAGS;
|
||||
String[] postTags = DEFAULT_POST_TAGS;
|
||||
boolean scoreOrdered = false;
|
||||
boolean highlightFilter = true;
|
||||
while ((token = jp.nextToken()) != JsonToken.END_OBJECT) {
|
||||
if (token == JsonToken.FIELD_NAME) {
|
||||
topLevelFieldName = jp.getCurrentName();
|
||||
} else if (token == JsonToken.START_ARRAY) {
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
|
||||
if (token == XContentParser.Token.FIELD_NAME) {
|
||||
topLevelFieldName = parser.currentName();
|
||||
} else if (token == XContentParser.Token.START_ARRAY) {
|
||||
if ("pre_tags".equals(topLevelFieldName) || "preTags".equals(topLevelFieldName)) {
|
||||
List<String> preTagsList = Lists.newArrayList();
|
||||
while ((token = jp.nextToken()) != JsonToken.END_ARRAY) {
|
||||
preTagsList.add(jp.getText());
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
|
||||
preTagsList.add(parser.text());
|
||||
}
|
||||
preTags = preTagsList.toArray(new String[preTagsList.size()]);
|
||||
} else if ("post_tags".equals(topLevelFieldName) || "postTags".equals(topLevelFieldName)) {
|
||||
List<String> postTagsList = Lists.newArrayList();
|
||||
while ((token = jp.nextToken()) != JsonToken.END_ARRAY) {
|
||||
postTagsList.add(jp.getText());
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
|
||||
postTagsList.add(parser.text());
|
||||
}
|
||||
postTags = postTagsList.toArray(new String[postTagsList.size()]);
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_STRING) {
|
||||
} else if (token.isValue()) {
|
||||
if ("order".equals(topLevelFieldName)) {
|
||||
if ("score".equals(jp.getText())) {
|
||||
scoreOrdered = true;
|
||||
} else {
|
||||
scoreOrdered = false;
|
||||
}
|
||||
scoreOrdered = "score".equals(parser.text());
|
||||
} else if ("tags_schema".equals(topLevelFieldName) || "tagsSchema".equals(topLevelFieldName)) {
|
||||
String schema = jp.getText();
|
||||
String schema = parser.text();
|
||||
if ("styled".equals(schema)) {
|
||||
preTags = STYLED_PRE_TAG;
|
||||
postTags = STYLED_POST_TAGS;
|
||||
}
|
||||
} else if ("highlight_filter".equals(topLevelFieldName) || "highlightFilter".equals(topLevelFieldName)) {
|
||||
highlightFilter = Booleans.parseBoolean(jp.getText(), true);
|
||||
highlightFilter = parser.booleanValue();
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_NUMBER_INT) {
|
||||
if ("highlight_filter".equals(topLevelFieldName) || "highlightFilter".equals(topLevelFieldName)) {
|
||||
highlightFilter = jp.getIntValue() != 0;
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE) {
|
||||
if ("highlight_filter".equals(topLevelFieldName) || "highlightFilter".equals(topLevelFieldName)) {
|
||||
highlightFilter = token == JsonToken.VALUE_TRUE;
|
||||
}
|
||||
} else if (token == JsonToken.START_OBJECT) {
|
||||
} else if (token == XContentParser.Token.START_OBJECT) {
|
||||
if ("fields".equals(topLevelFieldName)) {
|
||||
String highlightFieldName = null;
|
||||
while ((token = jp.nextToken()) != JsonToken.END_OBJECT) {
|
||||
if (token == JsonToken.FIELD_NAME) {
|
||||
highlightFieldName = jp.getCurrentName();
|
||||
} else if (token == JsonToken.START_OBJECT) {
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
|
||||
if (token == XContentParser.Token.FIELD_NAME) {
|
||||
highlightFieldName = parser.currentName();
|
||||
} else if (token == XContentParser.Token.START_OBJECT) {
|
||||
String fieldName = null;
|
||||
int fragmentSize = 100;
|
||||
int numOfFragments = 5;
|
||||
while ((token = jp.nextToken()) != JsonToken.END_OBJECT) {
|
||||
if (token == JsonToken.FIELD_NAME) {
|
||||
fieldName = jp.getCurrentName();
|
||||
} else if (token == JsonToken.VALUE_STRING) {
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
|
||||
if (token == XContentParser.Token.FIELD_NAME) {
|
||||
fieldName = parser.currentName();
|
||||
} else if (token.isValue()) {
|
||||
if ("fragment_size".equals(fieldName) || "fragmentSize".equals(fieldName)) {
|
||||
fragmentSize = Integer.parseInt(jp.getText());
|
||||
fragmentSize = parser.intValue();
|
||||
} else if ("number_of_fragments".equals(fieldName) || "numberOfFragments".equals(fieldName)) {
|
||||
numOfFragments = Integer.parseInt(jp.getText());
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_NUMBER_INT) {
|
||||
if ("fragment_size".equals(fieldName) || "fragmentSize".equals(fieldName)) {
|
||||
fragmentSize = jp.getIntValue();
|
||||
} else if ("number_of_fragments".equals(fieldName) || "numberOfFragments".equals(fieldName)) {
|
||||
numOfFragments = jp.getIntValue();
|
||||
numOfFragments = parser.intValue();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -23,17 +23,17 @@ import org.codehaus.jackson.JsonParser;
|
||||
import org.codehaus.jackson.JsonToken;
|
||||
import org.elasticsearch.search.SearchParseElement;
|
||||
import org.elasticsearch.search.internal.SearchContext;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
/**
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class FromParseElement implements SearchParseElement {
|
||||
|
||||
@Override public void parse(JsonParser jp, SearchContext context) throws Exception {
|
||||
if (jp.getCurrentToken() == JsonToken.VALUE_STRING) {
|
||||
context.from(Integer.parseInt(jp.getText()));
|
||||
} else {
|
||||
context.from(jp.getIntValue());
|
||||
@Override public void parse(XContentParser parser, SearchContext context) throws Exception {
|
||||
XContentParser.Token token = parser.currentToken();
|
||||
if (token.isValue()) {
|
||||
context.from(parser.intValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -19,10 +19,9 @@
|
||||
|
||||
package org.elasticsearch.search.query;
|
||||
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.codehaus.jackson.JsonToken;
|
||||
import org.elasticsearch.search.SearchParseElement;
|
||||
import org.elasticsearch.search.internal.SearchContext;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
@ -38,19 +37,15 @@ import org.elasticsearch.search.internal.SearchContext;
|
||||
*/
|
||||
public class IndicesBoostParseElement implements SearchParseElement {
|
||||
|
||||
@Override public void parse(JsonParser jp, SearchContext context) throws Exception {
|
||||
JsonToken token;
|
||||
while ((token = jp.nextToken()) != JsonToken.END_OBJECT) {
|
||||
if (token == JsonToken.FIELD_NAME) {
|
||||
String indexName = jp.getCurrentName();
|
||||
@Override public void parse(XContentParser parser, SearchContext context) throws Exception {
|
||||
XContentParser.Token token;
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
|
||||
if (token == XContentParser.Token.FIELD_NAME) {
|
||||
String indexName = parser.currentName();
|
||||
if (indexName.equals(context.shardTarget().index())) {
|
||||
jp.nextToken(); // move to the value
|
||||
parser.nextToken(); // move to the value
|
||||
// we found our query boost
|
||||
if (jp.getCurrentToken() == JsonToken.VALUE_STRING) {
|
||||
context.queryBoost(Float.parseFloat(jp.getText()));
|
||||
} else {
|
||||
context.queryBoost(jp.getFloatValue());
|
||||
}
|
||||
context.queryBoost(parser.floatValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -21,18 +21,19 @@ package org.elasticsearch.search.query;
|
||||
|
||||
import org.apache.lucene.search.Query;
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.elasticsearch.index.query.json.JsonIndexQueryParser;
|
||||
import org.elasticsearch.index.query.xcontent.XContentIndexQueryParser;
|
||||
import org.elasticsearch.search.SearchParseElement;
|
||||
import org.elasticsearch.search.internal.SearchContext;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
/**
|
||||
* @author kimchy (Shay Banon)
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class QueryParseElement implements SearchParseElement {
|
||||
|
||||
@Override public void parse(JsonParser jp, SearchContext context) throws Exception {
|
||||
JsonIndexQueryParser indexQueryParser = (JsonIndexQueryParser) context.queryParser();
|
||||
Query query = indexQueryParser.parse(jp);
|
||||
@Override public void parse(XContentParser parser, SearchContext context) throws Exception {
|
||||
XContentIndexQueryParser indexQueryParser = (XContentIndexQueryParser) context.queryParser();
|
||||
Query query = indexQueryParser.parse(parser);
|
||||
context.query(query);
|
||||
}
|
||||
}
|
@ -22,13 +22,14 @@ package org.elasticsearch.search.query;
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.elasticsearch.search.SearchParseElement;
|
||||
import org.elasticsearch.search.internal.SearchContext;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
/**
|
||||
* @author kimchy (Shay Banon)
|
||||
*/
|
||||
public class QueryParserNameParseElement implements SearchParseElement {
|
||||
|
||||
@Override public void parse(JsonParser jp, SearchContext context) throws Exception {
|
||||
context.queryParserName(jp.getText());
|
||||
@Override public void parse(XContentParser parser, SearchContext context) throws Exception {
|
||||
context.queryParserName(parser.text());
|
||||
}
|
||||
}
|
@ -19,21 +19,19 @@
|
||||
|
||||
package org.elasticsearch.search.query;
|
||||
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.codehaus.jackson.JsonToken;
|
||||
import org.elasticsearch.search.SearchParseElement;
|
||||
import org.elasticsearch.search.internal.SearchContext;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
/**
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
public class SizeParseElement implements SearchParseElement {
|
||||
|
||||
@Override public void parse(JsonParser jp, SearchContext context) throws Exception {
|
||||
if (jp.getCurrentToken() == JsonToken.VALUE_STRING) {
|
||||
context.size(Integer.parseInt(jp.getText()));
|
||||
} else {
|
||||
context.size(jp.getIntValue());
|
||||
@Override public void parse(XContentParser parser, SearchContext context) throws Exception {
|
||||
XContentParser.Token token = parser.currentToken();
|
||||
if (token.isValue()) {
|
||||
context.size(parser.intValue());
|
||||
}
|
||||
}
|
||||
}
|
@ -19,18 +19,17 @@
|
||||
|
||||
package org.elasticsearch.search.query;
|
||||
|
||||
import org.elasticsearch.util.gcommon.collect.Lists;
|
||||
import org.apache.lucene.search.Sort;
|
||||
import org.apache.lucene.search.SortField;
|
||||
import org.codehaus.jackson.JsonParser;
|
||||
import org.codehaus.jackson.JsonToken;
|
||||
import org.elasticsearch.index.mapper.FieldMappers;
|
||||
import org.elasticsearch.search.SearchParseElement;
|
||||
import org.elasticsearch.search.SearchParseException;
|
||||
import org.elasticsearch.search.internal.SearchContext;
|
||||
import org.elasticsearch.util.Booleans;
|
||||
import org.elasticsearch.util.gcommon.collect.Lists;
|
||||
import org.elasticsearch.util.gnu.trove.TObjectIntHashMap;
|
||||
import org.elasticsearch.util.trove.ExtTObjectIntHasMap;
|
||||
import org.elasticsearch.util.xcontent.XContentParser;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
@ -58,36 +57,36 @@ public class SortParseElement implements SearchParseElement {
|
||||
sortFieldTypesMapper.put("string_val", SortField.STRING_VAL);
|
||||
}
|
||||
|
||||
@Override public void parse(JsonParser jp, SearchContext context) throws Exception {
|
||||
JsonToken token = jp.getCurrentToken();
|
||||
@Override public void parse(XContentParser parser, SearchContext context) throws Exception {
|
||||
XContentParser.Token token = parser.currentToken();
|
||||
List<SortField> sortFields = Lists.newArrayListWithCapacity(2);
|
||||
if (token == JsonToken.START_ARRAY) {
|
||||
while ((token = jp.nextToken()) != JsonToken.END_ARRAY) {
|
||||
if (token == JsonToken.START_OBJECT) {
|
||||
addCompoundSortField(jp, context, sortFields);
|
||||
} else if (token == JsonToken.VALUE_STRING) {
|
||||
addSortField(context, sortFields, jp.getText(), false, -1);
|
||||
if (token == XContentParser.Token.START_ARRAY) {
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_ARRAY) {
|
||||
if (token == XContentParser.Token.START_OBJECT) {
|
||||
addCompoundSortField(parser, context, sortFields);
|
||||
} else if (token == XContentParser.Token.VALUE_STRING) {
|
||||
addSortField(context, sortFields, parser.text(), false, -1);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
addCompoundSortField(jp, context, sortFields);
|
||||
addCompoundSortField(parser, context, sortFields);
|
||||
}
|
||||
if (!sortFields.isEmpty()) {
|
||||
context.sort(new Sort(sortFields.toArray(new SortField[sortFields.size()])));
|
||||
}
|
||||
}
|
||||
|
||||
private void addCompoundSortField(JsonParser jp, SearchContext context, List<SortField> sortFields) throws IOException {
|
||||
JsonToken token;
|
||||
while ((token = jp.nextToken()) != JsonToken.END_OBJECT) {
|
||||
if (token == JsonToken.FIELD_NAME) {
|
||||
String fieldName = jp.getCurrentName();
|
||||
private void addCompoundSortField(XContentParser parser, SearchContext context, List<SortField> sortFields) throws IOException {
|
||||
XContentParser.Token token;
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
|
||||
if (token == XContentParser.Token.FIELD_NAME) {
|
||||
String fieldName = parser.currentName();
|
||||
boolean reverse = false;
|
||||
String innerJsonName = null;
|
||||
int type = -1;
|
||||
token = jp.nextToken();
|
||||
if (token == JsonToken.VALUE_STRING) {
|
||||
String direction = jp.getText();
|
||||
token = parser.nextToken();
|
||||
if (token == XContentParser.Token.VALUE_STRING) {
|
||||
String direction = parser.text();
|
||||
if (direction.equals("asc")) {
|
||||
if ("score".equals(fieldName)) {
|
||||
reverse = true;
|
||||
@ -102,25 +101,21 @@ public class SortParseElement implements SearchParseElement {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
while ((token = jp.nextToken()) != JsonToken.END_OBJECT) {
|
||||
if (token == JsonToken.FIELD_NAME) {
|
||||
innerJsonName = jp.getCurrentName();
|
||||
} else if (token == JsonToken.VALUE_STRING) {
|
||||
while ((token = parser.nextToken()) != XContentParser.Token.END_OBJECT) {
|
||||
if (token == XContentParser.Token.FIELD_NAME) {
|
||||
innerJsonName = parser.currentName();
|
||||
} else if (token == XContentParser.Token.VALUE_STRING) {
|
||||
if ("type".equals(innerJsonName)) {
|
||||
type = sortFieldTypesMapper.get(jp.getText());
|
||||
type = sortFieldTypesMapper.get(parser.text());
|
||||
if (type == -1) {
|
||||
throw new SearchParseException(context, "No sort type for [" + jp.getText() + "] with field [" + fieldName + "]");
|
||||
throw new SearchParseException(context, "No sort type for [" + parser.text() + "] with field [" + fieldName + "]");
|
||||
}
|
||||
} else if ("reverse".equals(innerJsonName)) {
|
||||
reverse = Booleans.parseBoolean(jp.getText(), reverse);
|
||||
reverse = Booleans.parseBoolean(parser.text(), reverse);
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_NUMBER_INT) {
|
||||
} else if (token.isValue()) {
|
||||
if ("reverse".equals(innerJsonName)) {
|
||||
reverse = jp.getIntValue() != 0;
|
||||
}
|
||||
} else if (token == JsonToken.VALUE_TRUE) {
|
||||
if ("reverse".equals(innerJsonName)) {
|
||||
reverse = true;
|
||||
reverse = parser.booleanValue();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -27,7 +27,7 @@ import org.elasticsearch.cluster.node.DiscoveryNode;
|
||||
public class SendRequestTransportException extends RemoteTransportException {
|
||||
|
||||
public SendRequestTransportException(DiscoveryNode node, String action, Throwable cause) {
|
||||
super(node.name(), node.address(), action, cause);
|
||||
super(node == null ? null : node.name(), node == null ? null : node.address(), action, cause);
|
||||
}
|
||||
|
||||
@Override public Throwable fillInStackTrace() {
|
||||
|
@ -21,6 +21,8 @@ package org.elasticsearch.util.xcontent;
|
||||
|
||||
import org.elasticsearch.ElasticSearchIllegalArgumentException;
|
||||
import org.elasticsearch.ElasticSearchIllegalStateException;
|
||||
import org.elasticsearch.util.xcontent.builder.BinaryXContentBuilder;
|
||||
import org.elasticsearch.util.xcontent.builder.TextXContentBuilder;
|
||||
import org.elasticsearch.util.xcontent.builder.XContentBuilder;
|
||||
import org.elasticsearch.util.xcontent.json.JsonXContent;
|
||||
|
||||
@ -40,21 +42,21 @@ public class XContentFactory {
|
||||
contents[0] = new JsonXContent();
|
||||
}
|
||||
|
||||
public static XContentBuilder contentBuilder(XContentType type) throws IOException {
|
||||
public static BinaryXContentBuilder contentBuilder(XContentType type) throws IOException {
|
||||
if (type == XContentType.JSON) {
|
||||
return JsonXContent.contentBinaryBuilder();
|
||||
}
|
||||
throw new ElasticSearchIllegalArgumentException("No matching content type for " + type);
|
||||
}
|
||||
|
||||
public static XContentBuilder contentBinaryBuilder(XContentType type) throws IOException {
|
||||
public static BinaryXContentBuilder contentBinaryBuilder(XContentType type) throws IOException {
|
||||
if (type == XContentType.JSON) {
|
||||
return JsonXContent.contentBinaryBuilder();
|
||||
}
|
||||
throw new ElasticSearchIllegalArgumentException("No matching content type for " + type);
|
||||
}
|
||||
|
||||
public static XContentBuilder contentTextBuilder(XContentType type) throws IOException {
|
||||
public static TextXContentBuilder contentTextBuilder(XContentType type) throws IOException {
|
||||
if (type == XContentType.JSON) {
|
||||
return JsonXContent.contentTextBuilder();
|
||||
}
|
||||
|
@ -29,15 +29,52 @@ import java.util.Map;
|
||||
public interface XContentParser {
|
||||
|
||||
enum Token {
|
||||
START_OBJECT,
|
||||
END_OBJECT,
|
||||
START_ARRAY,
|
||||
END_ARRAY,
|
||||
FIELD_NAME,
|
||||
VALUE_STRING,
|
||||
VALUE_NUMBER,
|
||||
VALUE_BOOLEAN,
|
||||
VALUE_NULL
|
||||
START_OBJECT {
|
||||
@Override public boolean isValue() {
|
||||
return false;
|
||||
}},
|
||||
|
||||
END_OBJECT {
|
||||
@Override public boolean isValue() {
|
||||
return false;
|
||||
}},
|
||||
|
||||
START_ARRAY {
|
||||
@Override public boolean isValue() {
|
||||
return false;
|
||||
}},
|
||||
|
||||
END_ARRAY {
|
||||
@Override public boolean isValue() {
|
||||
return false;
|
||||
}},
|
||||
|
||||
FIELD_NAME {
|
||||
@Override public boolean isValue() {
|
||||
return false;
|
||||
}},
|
||||
|
||||
VALUE_STRING {
|
||||
@Override public boolean isValue() {
|
||||
return true;
|
||||
}},
|
||||
|
||||
VALUE_NUMBER {
|
||||
@Override public boolean isValue() {
|
||||
return true;
|
||||
}},
|
||||
|
||||
VALUE_BOOLEAN {
|
||||
@Override public boolean isValue() {
|
||||
return true;
|
||||
}},
|
||||
|
||||
VALUE_NULL {
|
||||
@Override public boolean isValue() {
|
||||
return false;
|
||||
}};
|
||||
|
||||
public abstract boolean isValue();
|
||||
}
|
||||
|
||||
enum NumberType {
|
||||
@ -58,6 +95,8 @@ public interface XContentParser {
|
||||
|
||||
String text() throws IOException;
|
||||
|
||||
String textOrNull() throws IOException;
|
||||
|
||||
char[] textCharacters() throws IOException;
|
||||
|
||||
int textLength() throws IOException;
|
||||
|
@ -23,6 +23,7 @@ import org.codehaus.jackson.JsonEncoding;
|
||||
import org.codehaus.jackson.JsonFactory;
|
||||
import org.elasticsearch.ElasticSearchException;
|
||||
import org.elasticsearch.util.ThreadLocals;
|
||||
import org.elasticsearch.util.io.FastStringReader;
|
||||
import org.elasticsearch.util.json.Jackson;
|
||||
import org.elasticsearch.util.xcontent.XContent;
|
||||
import org.elasticsearch.util.xcontent.XContentGenerator;
|
||||
@ -30,7 +31,6 @@ import org.elasticsearch.util.xcontent.XContentParser;
|
||||
import org.elasticsearch.util.xcontent.XContentType;
|
||||
import org.elasticsearch.util.xcontent.builder.BinaryXContentBuilder;
|
||||
import org.elasticsearch.util.xcontent.builder.TextXContentBuilder;
|
||||
import org.elasticsearch.util.xcontent.builder.XContentBuilder;
|
||||
|
||||
import java.io.*;
|
||||
|
||||
@ -85,15 +85,15 @@ public class JsonXContent implements XContent {
|
||||
}
|
||||
}
|
||||
|
||||
public static XContentBuilder contentBuilder() throws IOException {
|
||||
public static BinaryXContentBuilder contentBuilder() throws IOException {
|
||||
return contentBinaryBuilder();
|
||||
}
|
||||
|
||||
public static XContentBuilder contentBinaryBuilder() throws IOException {
|
||||
public static BinaryXContentBuilder contentBinaryBuilder() throws IOException {
|
||||
return CachedBinaryBuilder.cached();
|
||||
}
|
||||
|
||||
public static XContentBuilder contentTextBuilder() throws IOException {
|
||||
public static TextXContentBuilder contentTextBuilder() throws IOException {
|
||||
return CachedTextBuilder.cached();
|
||||
}
|
||||
|
||||
@ -117,7 +117,7 @@ public class JsonXContent implements XContent {
|
||||
}
|
||||
|
||||
@Override public XContentParser createParser(String content) throws IOException {
|
||||
return new JsonXContentParser(jsonFactory.createJsonParser(content));
|
||||
return new JsonXContentParser(jsonFactory.createJsonParser(new FastStringReader(content)));
|
||||
}
|
||||
|
||||
@Override public XContentParser createParser(InputStream is) throws IOException {
|
||||
|
@ -92,6 +92,13 @@ public abstract class AbstractXContentParser implements XContentParser {
|
||||
|
||||
protected abstract double doDoubleValue() throws IOException;
|
||||
|
||||
@Override public String textOrNull() throws IOException {
|
||||
if (currentToken() == Token.VALUE_NULL) {
|
||||
return null;
|
||||
}
|
||||
return text();
|
||||
}
|
||||
|
||||
@Override public Map<String, Object> map() throws IOException {
|
||||
return XContentMapConverter.readMap(this);
|
||||
}
|
||||
|
@ -17,7 +17,7 @@
|
||||
* under the License.
|
||||
*/
|
||||
|
||||
package org.elasticsearch.index.query.json;
|
||||
package org.elasticsearch.index.query.xcontent;
|
||||
|
||||
import org.apache.lucene.index.Term;
|
||||
import org.apache.lucene.search.*;
|
||||
@ -39,8 +39,8 @@ import java.lang.reflect.Field;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.elasticsearch.index.query.json.JsonFilterBuilders.*;
|
||||
import static org.elasticsearch.index.query.json.JsonQueryBuilders.*;
|
||||
import static org.elasticsearch.index.query.xcontent.FilterBuilders.*;
|
||||
import static org.elasticsearch.index.query.xcontent.QueryBuilders.*;
|
||||
import static org.elasticsearch.util.io.Streams.*;
|
||||
import static org.elasticsearch.util.settings.ImmutableSettings.Builder.*;
|
||||
import static org.hamcrest.MatcherAssert.*;
|
||||
@ -50,7 +50,7 @@ import static org.hamcrest.Matchers.*;
|
||||
* @author kimchy (shay.banon)
|
||||
*/
|
||||
@Test
|
||||
public class SimpleJsonIndexQueryParserTests {
|
||||
public class SimpleIndexQueryParserTests {
|
||||
|
||||
private final Index index = new Index("test");
|
||||
|
||||
@ -65,7 +65,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
@Test public void testQueryString() throws Exception {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/query.json");
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/query.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
assertThat(parsedQuery, instanceOf(TermQuery.class));
|
||||
TermQuery termQuery = (TermQuery) parsedQuery;
|
||||
@ -84,7 +84,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
@Test public void testQueryStringFields1() throws Exception {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/query-fields1.json");
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/query-fields1.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
assertThat(parsedQuery, instanceOf(BooleanQuery.class));
|
||||
BooleanQuery bQuery = (BooleanQuery) parsedQuery;
|
||||
@ -105,7 +105,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
@Test public void testQueryStringFields2() throws Exception {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/query-fields2.json");
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/query-fields2.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
assertThat(parsedQuery, instanceOf(DisjunctionMaxQuery.class));
|
||||
DisjunctionMaxQuery disMaxQuery = (DisjunctionMaxQuery) parsedQuery;
|
||||
@ -128,7 +128,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
@Test public void testQueryStringFields3() throws Exception {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/query-fields3.json");
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/query-fields3.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
assertThat(parsedQuery, instanceOf(DisjunctionMaxQuery.class));
|
||||
DisjunctionMaxQuery disMaxQuery = (DisjunctionMaxQuery) parsedQuery;
|
||||
@ -141,7 +141,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
@Test public void testMatchAllBuilder() throws Exception {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
Query parsedQuery = queryParser.parse(matchAllQuery().boost(1.2f).buildAsString());
|
||||
Query parsedQuery = queryParser.parse(matchAllQuery().boost(1.2f));
|
||||
assertThat(parsedQuery, instanceOf(MatchAllDocsQuery.class));
|
||||
MatchAllDocsQuery matchAllDocsQuery = (MatchAllDocsQuery) parsedQuery;
|
||||
assertThat((double) matchAllDocsQuery.getBoost(), closeTo(1.2, 0.01));
|
||||
@ -149,7 +149,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
@Test public void testMatchAll() throws Exception {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/matchAll.json");
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/matchAll.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
assertThat(parsedQuery, instanceOf(MatchAllDocsQuery.class));
|
||||
MatchAllDocsQuery matchAllDocsQuery = (MatchAllDocsQuery) parsedQuery;
|
||||
@ -177,7 +177,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
@Test public void testDisMax() throws Exception {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/disMax.json");
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/disMax.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
assertThat(parsedQuery, instanceOf(DisjunctionMaxQuery.class));
|
||||
DisjunctionMaxQuery disjunctionMaxQuery = (DisjunctionMaxQuery) parsedQuery;
|
||||
@ -208,7 +208,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
@Test public void testTermQuery() throws IOException {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/term.json");
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/term.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
assertThat(parsedQuery, instanceOf(NumericRangeQuery.class));
|
||||
NumericRangeQuery fieldQuery = (NumericRangeQuery) parsedQuery;
|
||||
@ -231,7 +231,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
@Test public void testFieldQuery1() throws IOException {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/field1.json");
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/field1.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
assertThat(parsedQuery, instanceOf(NumericRangeQuery.class));
|
||||
NumericRangeQuery fieldQuery = (NumericRangeQuery) parsedQuery;
|
||||
@ -243,7 +243,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
@Test public void testFieldQuery2() throws IOException {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/field2.json");
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/field2.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
assertThat(parsedQuery, instanceOf(BooleanQuery.class));
|
||||
BooleanQuery bQuery = (BooleanQuery) parsedQuery;
|
||||
@ -256,7 +256,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
@Test public void testFieldQuery3() throws IOException {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/field3.json");
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/field3.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
assertThat((double) parsedQuery.getBoost(), closeTo(2.0, 0.01));
|
||||
assertThat(parsedQuery, instanceOf(NumericRangeQuery.class));
|
||||
@ -281,7 +281,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
@Test public void testTermWithBoostQuery() throws IOException {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/term-with-boost.json");
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/term-with-boost.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
assertThat(parsedQuery, instanceOf(NumericRangeQuery.class));
|
||||
NumericRangeQuery fieldQuery = (NumericRangeQuery) parsedQuery;
|
||||
@ -303,7 +303,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
@Test public void testPrefixQuery() throws IOException {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/prefix.json");
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/prefix.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
assertThat(parsedQuery, instanceOf(PrefixQuery.class));
|
||||
PrefixQuery prefixQuery = (PrefixQuery) parsedQuery;
|
||||
@ -322,7 +322,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
@Test public void testPrefixFilteredQuery() throws IOException {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/prefix-filter.json");
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/prefix-filter.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
assertThat(parsedQuery, instanceOf(FilteredQuery.class));
|
||||
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery;
|
||||
@ -341,7 +341,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
@Test public void testPrefixQueryBoostQuery() throws IOException {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/prefix-with-boost.json");
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/prefix-with-boost.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
assertThat(parsedQuery, instanceOf(PrefixQuery.class));
|
||||
PrefixQuery prefixQuery = (PrefixQuery) parsedQuery;
|
||||
@ -359,7 +359,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
@Test public void testWildcardQuery() throws IOException {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/wildcard.json");
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/wildcard.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
assertThat(parsedQuery, instanceOf(WildcardQuery.class));
|
||||
WildcardQuery wildcardQuery = (WildcardQuery) parsedQuery;
|
||||
@ -381,7 +381,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
@Test public void testRangeQuery() throws IOException {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/range.json");
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/range.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
// since age is automatically registered in data, we encode it as numeric
|
||||
assertThat(parsedQuery, instanceOf(NumericRangeQuery.class));
|
||||
@ -395,7 +395,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
@Test public void testRange2Query() throws IOException {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/range2.json");
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/range2.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
// since age is automatically registered in data, we encode it as numeric
|
||||
assertThat(parsedQuery, instanceOf(NumericRangeQuery.class));
|
||||
@ -424,7 +424,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
@Test public void testRangeFilteredQuery() throws IOException {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/range-filter.json");
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/range-filter.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
// since age is automatically registered in data, we encode it as numeric
|
||||
assertThat(parsedQuery, instanceOf(FilteredQuery.class));
|
||||
@ -440,7 +440,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
@Test public void testBoolFilteredQuery() throws IOException {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/bool-filter.json");
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/bool-filter.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
assertThat(parsedQuery, instanceOf(FilteredQuery.class));
|
||||
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery;
|
||||
@ -474,7 +474,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
@Test public void testBoolQuery() throws IOException {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/bool.json");
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/bool.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
assertThat(parsedQuery, instanceOf(BooleanQuery.class));
|
||||
BooleanQuery booleanQuery = (BooleanQuery) parsedQuery;
|
||||
@ -506,7 +506,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
@Test public void testFilteredQuery() throws IOException {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/filtered-query.json");
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/filtered-query.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
assertThat(parsedQuery, instanceOf(FilteredQuery.class));
|
||||
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery;
|
||||
@ -516,7 +516,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
@Test public void testFilteredQuery2() throws IOException {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/filtered-query2.json");
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/filtered-query2.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
assertThat(parsedQuery, instanceOf(FilteredQuery.class));
|
||||
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery;
|
||||
@ -526,7 +526,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
@Test public void testFilteredQuery3() throws IOException {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/filtered-query3.json");
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/filtered-query3.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
assertThat(parsedQuery, instanceOf(FilteredQuery.class));
|
||||
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery;
|
||||
@ -542,7 +542,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
@Test public void testFilteredQuery4() throws IOException {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/filtered-query4.json");
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/filtered-query4.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
assertThat(parsedQuery, instanceOf(FilteredQuery.class));
|
||||
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery;
|
||||
@ -570,7 +570,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
@Test public void testTermsFilterQuery() throws Exception {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/terms-filter.json");
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/terms-filter.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
assertThat(parsedQuery, instanceOf(FilteredQuery.class));
|
||||
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery;
|
||||
@ -593,7 +593,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
@Test public void testConstantScoreQuery() throws IOException {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/constantScore-query.json");
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/constantScore-query.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
assertThat(parsedQuery, instanceOf(ConstantScoreQuery.class));
|
||||
ConstantScoreQuery constantScoreQuery = (ConstantScoreQuery) parsedQuery;
|
||||
@ -611,7 +611,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
@Test public void testSpanTermQuery() throws IOException {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/spanTerm.json");
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/spanTerm.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
assertThat(parsedQuery, instanceOf(SpanTermQuery.class));
|
||||
SpanTermQuery termQuery = (SpanTermQuery) parsedQuery;
|
||||
@ -631,7 +631,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
@Test public void testSpanNotQuery() throws IOException {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/spanNot.json");
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/spanNot.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
assertThat(parsedQuery, instanceOf(SpanNotQuery.class));
|
||||
SpanNotQuery spanNotQuery = (SpanNotQuery) parsedQuery;
|
||||
@ -652,7 +652,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
@Test public void testSpanFirstQuery() throws IOException {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/spanFirst.json");
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/spanFirst.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
assertThat(parsedQuery, instanceOf(SpanFirstQuery.class));
|
||||
SpanFirstQuery spanFirstQuery = (SpanFirstQuery) parsedQuery;
|
||||
@ -675,7 +675,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
@Test public void testSpanNearQuery() throws IOException {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/spanNear.json");
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/spanNear.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
assertThat(parsedQuery, instanceOf(SpanNearQuery.class));
|
||||
SpanNearQuery spanNearQuery = (SpanNearQuery) parsedQuery;
|
||||
@ -699,7 +699,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
@Test public void testSpanOrQuery() throws IOException {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/spanOr.json");
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/spanOr.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
assertThat(parsedQuery, instanceOf(SpanOrQuery.class));
|
||||
SpanOrQuery spanOrQuery = (SpanOrQuery) parsedQuery;
|
||||
@ -724,7 +724,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
@Test public void testQueryFilter() throws Exception {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/query-filter.json");
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/query-filter.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
assertThat(parsedQuery, instanceOf(FilteredQuery.class));
|
||||
FilteredQuery filteredQuery = (FilteredQuery) parsedQuery;
|
||||
@ -749,7 +749,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
@Test public void testMoreLikeThis() throws Exception {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/mlt.json");
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/mlt.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
assertThat(parsedQuery, instanceOf(MoreLikeThisQuery.class));
|
||||
MoreLikeThisQuery mltQuery = (MoreLikeThisQuery) parsedQuery;
|
||||
@ -769,7 +769,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
@Test public void testFuzzyLikeThis() throws Exception {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/fuzzyLikeThis.json");
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/fuzzyLikeThis.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
assertThat(parsedQuery, instanceOf(FuzzyLikeThisQuery.class));
|
||||
// FuzzyLikeThisQuery fuzzyLikeThisQuery = (FuzzyLikeThisQuery) parsedQuery;
|
||||
@ -784,7 +784,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
@Test public void testFuzzyLikeThisField() throws Exception {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/fuzzyLikeThisField.json");
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/fuzzyLikeThisField.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
assertThat(parsedQuery, instanceOf(FuzzyLikeThisQuery.class));
|
||||
// FuzzyLikeThisQuery fuzzyLikeThisQuery = (FuzzyLikeThisQuery) parsedQuery;
|
||||
@ -803,7 +803,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
|
||||
@Test public void testMoreLikeThisField() throws Exception {
|
||||
IndexQueryParser queryParser = newQueryParser();
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/json/mltField.json");
|
||||
String query = copyToStringFromClasspath("/org/elasticsearch/index/query/xcontent/mltField.json");
|
||||
Query parsedQuery = queryParser.parse(query);
|
||||
assertThat(parsedQuery, instanceOf(MoreLikeThisQuery.class));
|
||||
MoreLikeThisQuery mltQuery = (MoreLikeThisQuery) parsedQuery;
|
||||
@ -813,8 +813,8 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
assertThat(mltQuery.getMaxQueryTerms(), equalTo(12));
|
||||
}
|
||||
|
||||
private JsonIndexQueryParser newQueryParser() throws IOException {
|
||||
return new JsonIndexQueryParser(new Index("test"), EMPTY_SETTINGS,
|
||||
private XContentIndexQueryParser newQueryParser() throws IOException {
|
||||
return new XContentIndexQueryParser(new Index("test"), EMPTY_SETTINGS,
|
||||
newMapperService(), new IndexCache(index), new AnalysisService(index), null, null, null, "test", null);
|
||||
}
|
||||
|
||||
@ -822,7 +822,7 @@ public class SimpleJsonIndexQueryParserTests {
|
||||
Environment environment = new Environment();
|
||||
MapperService mapperService = new MapperService(index, EMPTY_SETTINGS, environment, new AnalysisService(index));
|
||||
// init a mapping with data
|
||||
mapperService.type("person").parse(copyToBytesFromClasspath("/org/elasticsearch/index/query/json/data.json"));
|
||||
mapperService.type("person").parse(copyToBytesFromClasspath("/org/elasticsearch/index/query/xcontent/data.json"));
|
||||
return mapperService;
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user