summaryrefslogtreecommitdiff
path: root/core/src/main/java
diff options
context:
space:
mode:
authorMartijn van Groningen <martijn.v.groningen@gmail.com>2016-01-12 12:10:58 +0100
committerMartijn van Groningen <martijn.v.groningen@gmail.com>2016-01-13 09:44:01 +0100
commita2796b555f5c174f78303a2ce0c5a6439259f84b (patch)
tree9c4bf73402185fed979df31446fbcc011b9bd0ef /core/src/main/java
parentce32b959fdcdaf5f3a78df9bf2d8039082735940 (diff)
mappings: Search filter should wrap the types filters in a separate boolean as should clauses
So that a document must either match with one of the types and the non nested clause. Closes #15757
Diffstat (limited to 'core/src/main/java')
-rwxr-xr-xcore/src/main/java/org/elasticsearch/index/mapper/MapperService.java9
1 files changed, 5 insertions, 4 deletions
diff --git a/core/src/main/java/org/elasticsearch/index/mapper/MapperService.java b/core/src/main/java/org/elasticsearch/index/mapper/MapperService.java
index 2ca4241356..25796c605f 100755
--- a/core/src/main/java/org/elasticsearch/index/mapper/MapperService.java
+++ b/core/src/main/java/org/elasticsearch/index/mapper/MapperService.java
@@ -519,16 +519,17 @@ public class MapperService extends AbstractIndexComponent implements Closeable {
return termsFilter;
}
} else {
- // Current bool filter requires that at least one should clause matches, even with a must clause.
- BooleanQuery.Builder bool = new BooleanQuery.Builder();
+ BooleanQuery.Builder typesBool = new BooleanQuery.Builder();
for (String type : types) {
DocumentMapper docMapper = documentMapper(type);
if (docMapper == null) {
- bool.add(new TermQuery(new Term(TypeFieldMapper.NAME, type)), BooleanClause.Occur.SHOULD);
+ typesBool.add(new TermQuery(new Term(TypeFieldMapper.NAME, type)), BooleanClause.Occur.SHOULD);
} else {
- bool.add(docMapper.typeFilter(), BooleanClause.Occur.SHOULD);
+ typesBool.add(docMapper.typeFilter(), BooleanClause.Occur.SHOULD);
}
}
+ BooleanQuery.Builder bool = new BooleanQuery.Builder();
+ bool.add(typesBool.build(), Occur.MUST);
if (filterPercolateType) {
bool.add(percolatorType, BooleanClause.Occur.MUST_NOT);
}