Skip to content

Commit dcdff60

Browse files
committed
Search: When searching against a type with a dfs search type, dfs is ignored, closes elastic#1546.
1 parent 9320edc commit dcdff60

File tree

2 files changed

+22
-12
lines changed

2 files changed

+22
-12
lines changed

modules/elasticsearch/src/main/java/org/elasticsearch/search/highlight/HighlightPhase.java

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -133,16 +133,26 @@ public static class Encoders {
133133
// QueryScorer uses WeightedSpanTermExtractor to extract terms, but we can't really plug into
134134
// it, so, we hack here (and really only support top level queries)
135135
Query query = context.parsedQuery().query();
136-
if (query instanceof FunctionScoreQuery) {
137-
query = ((FunctionScoreQuery) query).getSubQuery();
138-
} else if (query instanceof FiltersFunctionScoreQuery) {
139-
query = ((FiltersFunctionScoreQuery) query).getSubQuery();
140-
} else if (query instanceof ConstantScoreQuery) {
141-
ConstantScoreQuery q = (ConstantScoreQuery) query;
142-
if (q.getQuery() != null) {
143-
query = q.getQuery();
136+
while (true) {
137+
boolean extracted = false;
138+
if (query instanceof FunctionScoreQuery) {
139+
query = ((FunctionScoreQuery) query).getSubQuery();
140+
extracted = true;
141+
} else if (query instanceof FiltersFunctionScoreQuery) {
142+
query = ((FiltersFunctionScoreQuery) query).getSubQuery();
143+
extracted = true;
144+
} else if (query instanceof ConstantScoreQuery) {
145+
ConstantScoreQuery q = (ConstantScoreQuery) query;
146+
if (q.getQuery() != null) {
147+
query = q.getQuery();
148+
extracted = true;
149+
}
150+
}
151+
if (!extracted) {
152+
break;
144153
}
145154
}
155+
146156
QueryScorer queryScorer = new QueryScorer(query, null);
147157
queryScorer.setExpandMultiTermQuery(true);
148158
Fragmenter fragmenter;

modules/elasticsearch/src/main/java/org/elasticsearch/search/query/QueryPhase.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,10 @@ public class QueryPhase implements SearchPhase {
8585
if (context.queryBoost() != 1.0f) {
8686
context.parsedQuery(new ParsedQuery(new FunctionScoreQuery(context.query(), new BoostScoreFunction(context.queryBoost())), context.parsedQuery()));
8787
}
88+
Filter searchFilter = context.mapperService().searchFilter(context.types());
89+
if (searchFilter != null) {
90+
context.parsedQuery(new ParsedQuery(new FilteredQuery(context.query(), context.filterCache().cache(searchFilter)), context.parsedQuery()));
91+
}
8892
facetPhase.preProcess(context);
8993
}
9094

@@ -169,10 +173,6 @@ public void execute(SearchContext searchContext) throws QueryPhaseExecutionExcep
169173
searchContext.queryResult().size(searchContext.size());
170174

171175
Query query = searchContext.query();
172-
Filter searchFilter = searchContext.mapperService().searchFilter(searchContext.types());
173-
if (searchFilter != null) {
174-
query = new FilteredQuery(query, searchContext.filterCache().cache(searchFilter));
175-
}
176176

177177
TopDocs topDocs;
178178
int numDocs = searchContext.from() + searchContext.size();

0 commit comments

Comments
 (0)