Query: Add `index.query.default_field` allowing to control the default field used to search on, closes #1657.
This commit is contained in:
parent
8b9c75cd7e
commit
5a1cbe0c83
|
@ -41,6 +41,7 @@ import org.elasticsearch.common.settings.ImmutableSettings;
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
import org.elasticsearch.index.analysis.*;
|
import org.elasticsearch.index.analysis.*;
|
||||||
import org.elasticsearch.index.mapper.FieldMapper;
|
import org.elasticsearch.index.mapper.FieldMapper;
|
||||||
|
import org.elasticsearch.index.mapper.internal.AllFieldMapper;
|
||||||
import org.elasticsearch.index.service.IndexService;
|
import org.elasticsearch.index.service.IndexService;
|
||||||
import org.elasticsearch.indices.IndicesService;
|
import org.elasticsearch.indices.IndicesService;
|
||||||
import org.elasticsearch.indices.analysis.IndicesAnalysisService;
|
import org.elasticsearch.indices.analysis.IndicesAnalysisService;
|
||||||
|
@ -130,7 +131,11 @@ public class TransportAnalyzeAction extends TransportSingleCustomOperationAction
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (field == null) {
|
if (field == null) {
|
||||||
field = "_all";
|
if (indexService != null) {
|
||||||
|
field = indexService.queryParserService().defaultField();
|
||||||
|
} else {
|
||||||
|
field = AllFieldMapper.NAME;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (analyzer == null && request.analyzer() != null) {
|
if (analyzer == null && request.analyzer() != null) {
|
||||||
if (indexService == null) {
|
if (indexService == null) {
|
||||||
|
|
|
@ -25,7 +25,6 @@ import org.apache.lucene.search.FuzzyLikeThisQuery;
|
||||||
import org.apache.lucene.search.Query;
|
import org.apache.lucene.search.Query;
|
||||||
import org.elasticsearch.common.inject.Inject;
|
import org.elasticsearch.common.inject.Inject;
|
||||||
import org.elasticsearch.common.xcontent.XContentParser;
|
import org.elasticsearch.common.xcontent.XContentParser;
|
||||||
import org.elasticsearch.index.mapper.internal.AllFieldMapper;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -114,7 +113,7 @@ public class FuzzyLikeThisQueryParser implements QueryParser {
|
||||||
FuzzyLikeThisQuery query = new FuzzyLikeThisQuery(maxNumTerms, analyzer);
|
FuzzyLikeThisQuery query = new FuzzyLikeThisQuery(maxNumTerms, analyzer);
|
||||||
if (fields == null) {
|
if (fields == null) {
|
||||||
// add the default _all field
|
// add the default _all field
|
||||||
query.addTerms(likeText, AllFieldMapper.NAME, minSimilarity, prefixLength);
|
query.addTerms(likeText, parseContext.defaultField(), minSimilarity, prefixLength);
|
||||||
} else {
|
} else {
|
||||||
for (String field : fields) {
|
for (String field : fields) {
|
||||||
query.addTerms(likeText, field, minSimilarity, prefixLength);
|
query.addTerms(likeText, field, minSimilarity, prefixLength);
|
||||||
|
|
|
@ -35,6 +35,7 @@ import org.elasticsearch.index.analysis.AnalysisService;
|
||||||
import org.elasticsearch.index.cache.IndexCache;
|
import org.elasticsearch.index.cache.IndexCache;
|
||||||
import org.elasticsearch.index.engine.IndexEngine;
|
import org.elasticsearch.index.engine.IndexEngine;
|
||||||
import org.elasticsearch.index.mapper.MapperService;
|
import org.elasticsearch.index.mapper.MapperService;
|
||||||
|
import org.elasticsearch.index.mapper.internal.AllFieldMapper;
|
||||||
import org.elasticsearch.index.settings.IndexSettings;
|
import org.elasticsearch.index.settings.IndexSettings;
|
||||||
import org.elasticsearch.index.similarity.SimilarityService;
|
import org.elasticsearch.index.similarity.SimilarityService;
|
||||||
import org.elasticsearch.indices.query.IndicesQueriesRegistry;
|
import org.elasticsearch.indices.query.IndicesQueriesRegistry;
|
||||||
|
@ -81,6 +82,8 @@ public class IndexQueryParserService extends AbstractIndexComponent {
|
||||||
|
|
||||||
private final Map<String, FilterParser> filterParsers;
|
private final Map<String, FilterParser> filterParsers;
|
||||||
|
|
||||||
|
private String defaultField;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public IndexQueryParserService(Index index, @IndexSettings Settings indexSettings,
|
public IndexQueryParserService(Index index, @IndexSettings Settings indexSettings,
|
||||||
IndicesQueriesRegistry indicesQueriesRegistry,
|
IndicesQueriesRegistry indicesQueriesRegistry,
|
||||||
|
@ -97,6 +100,8 @@ public class IndexQueryParserService extends AbstractIndexComponent {
|
||||||
this.indexCache = indexCache;
|
this.indexCache = indexCache;
|
||||||
this.indexEngine = indexEngine;
|
this.indexEngine = indexEngine;
|
||||||
|
|
||||||
|
this.defaultField = indexSettings.get("index.query.default_field", AllFieldMapper.NAME);
|
||||||
|
|
||||||
List<QueryParser> queryParsers = newArrayList();
|
List<QueryParser> queryParsers = newArrayList();
|
||||||
if (namedQueryParsers != null) {
|
if (namedQueryParsers != null) {
|
||||||
Map<String, Settings> queryParserGroups = indexSettings.getGroups(IndexQueryParserService.Defaults.QUERY_PREFIX);
|
Map<String, Settings> queryParserGroups = indexSettings.getGroups(IndexQueryParserService.Defaults.QUERY_PREFIX);
|
||||||
|
@ -148,6 +153,10 @@ public class IndexQueryParserService extends AbstractIndexComponent {
|
||||||
cache.remove();
|
cache.remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String defaultField() {
|
||||||
|
return this.defaultField;
|
||||||
|
}
|
||||||
|
|
||||||
public QueryParser queryParser(String name) {
|
public QueryParser queryParser(String name) {
|
||||||
return queryParsers.get(name);
|
return queryParsers.get(name);
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,6 @@ import org.apache.lucene.search.Query;
|
||||||
import org.elasticsearch.common.inject.Inject;
|
import org.elasticsearch.common.inject.Inject;
|
||||||
import org.elasticsearch.common.lucene.search.MoreLikeThisQuery;
|
import org.elasticsearch.common.lucene.search.MoreLikeThisQuery;
|
||||||
import org.elasticsearch.common.xcontent.XContentParser;
|
import org.elasticsearch.common.xcontent.XContentParser;
|
||||||
import org.elasticsearch.index.mapper.internal.AllFieldMapper;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -53,7 +52,7 @@ public class MoreLikeThisQueryParser implements QueryParser {
|
||||||
XContentParser parser = parseContext.parser();
|
XContentParser parser = parseContext.parser();
|
||||||
|
|
||||||
MoreLikeThisQuery mltQuery = new MoreLikeThisQuery();
|
MoreLikeThisQuery mltQuery = new MoreLikeThisQuery();
|
||||||
mltQuery.setMoreLikeFields(new String[]{AllFieldMapper.NAME});
|
mltQuery.setMoreLikeFields(new String[]{parseContext.defaultField()});
|
||||||
mltQuery.setSimilarity(parseContext.searchSimilarity());
|
mltQuery.setSimilarity(parseContext.searchSimilarity());
|
||||||
Analyzer analyzer = null;
|
Analyzer analyzer = null;
|
||||||
|
|
||||||
|
|
|
@ -130,6 +130,10 @@ public class QueryParseContext {
|
||||||
return indexQueryParser.indexCache;
|
return indexQueryParser.indexCache;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String defaultField() {
|
||||||
|
return indexQueryParser.defaultField();
|
||||||
|
}
|
||||||
|
|
||||||
public MapperQueryParser singleQueryParser(QueryParserSettings settings) {
|
public MapperQueryParser singleQueryParser(QueryParserSettings settings) {
|
||||||
queryParser.reset(settings);
|
queryParser.reset(settings);
|
||||||
return queryParser;
|
return queryParser;
|
||||||
|
|
|
@ -34,7 +34,6 @@ import org.elasticsearch.common.lucene.search.Queries;
|
||||||
import org.elasticsearch.common.regex.Regex;
|
import org.elasticsearch.common.regex.Regex;
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
import org.elasticsearch.common.xcontent.XContentParser;
|
import org.elasticsearch.common.xcontent.XContentParser;
|
||||||
import org.elasticsearch.index.mapper.internal.AllFieldMapper;
|
|
||||||
import org.elasticsearch.index.query.support.QueryParsers;
|
import org.elasticsearch.index.query.support.QueryParsers;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -68,7 +67,7 @@ public class QueryStringQueryParser implements QueryParser {
|
||||||
XContentParser parser = parseContext.parser();
|
XContentParser parser = parseContext.parser();
|
||||||
|
|
||||||
MultiFieldQueryParserSettings qpSettings = new MultiFieldQueryParserSettings();
|
MultiFieldQueryParserSettings qpSettings = new MultiFieldQueryParserSettings();
|
||||||
qpSettings.defaultField(AllFieldMapper.NAME);
|
qpSettings.defaultField(parseContext.defaultField());
|
||||||
qpSettings.analyzeWildcard(defaultAnalyzeWildcard);
|
qpSettings.analyzeWildcard(defaultAnalyzeWildcard);
|
||||||
qpSettings.allowLeadingWildcard(defaultAllowLeadingWildcard);
|
qpSettings.allowLeadingWildcard(defaultAllowLeadingWildcard);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue