diff options
author | Martijn van Groningen <martijn.v.groningen@gmail.com> | 2016-01-12 12:10:58 +0100 |
---|---|---|
committer | Martijn van Groningen <martijn.v.groningen@gmail.com> | 2016-01-13 09:44:01 +0100 |
commit | a2796b555f5c174f78303a2ce0c5a6439259f84b (patch) | |
tree | 9c4bf73402185fed979df31446fbcc011b9bd0ef /core/src/main/java/org/elasticsearch | |
parent | ce32b959fdcdaf5f3a78df9bf2d8039082735940 (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/org/elasticsearch')
-rwxr-xr-x | core/src/main/java/org/elasticsearch/index/mapper/MapperService.java | 9 |
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); } |