t;String, Object> termFilter;
private final Map<String, Range> rangeFilter;
private final Map<String, Match> matchFilter;
private int size;
private String orderBy = null;
private String order = null;
// query 查询语法, 是否需要 filtered, filter 这两层
// 5.x 版本不再需要这两层
private boolean isNeedFilterLayer = true;
private Integer from;
private final Map<String, Object> mustNotTermFilter;
private final Map<String,Object> shouldTermFilter;
private Integer shouldMatchMinimum;
private List<String> includes;
private List<String> excludes;
public EsQuery() {
this.termFilter = new HashMap<>();
this.rangeFilter = new HashMap();
this.matchFilter = new HashMap();
this.mustNotTermFilter = new HashMap<>();
this.shouldTermFilter = new HashedMap();
this.size = DEFAULT_SIZE;
this.includes = new ArrayList<>();
this.excludes = new ArrayList<>();
}
public EsQuery addTermFilter(String key, Object value) {
this.termFilter.put(key, value);
return this;
}
public EsQuery addMustNotTermFilter(String key, Object value) {
this.mustNotTermFilter.put(key, value);
return this;
}
public EsQuery addAllMustNotTermFilter(Map<String,Object> mustNot) {
if (mustNot != null && !mustNot.isEmpty()) {
this.mustNotTermFilter.putAll(mustNot);
}
return this;
}
public EsQuery addShouldTermFilter(String key, Object value) {
this.shouldTermFilter.put(key, value);
return this;
}
public EsQuery addAllShouldTermFilter(Map<String,Object> should) {
if (should != null && !should.isEmpty()) {
this.shouldTermFilter.putAll(should);
}
return this;
}
public EsQuery addRangeFilter(String key, long gte, long lte){
this.rangeFilter.put(key, new Range(gte, lte));
return this;
}
public EsQuery addMatchFilter(String key, Match value) {
this.matchFilter.put(key, value);
return this;
}
public EsQuery addIncludeFields(List<String> includes) {
this.includes.addAll(includes);
return this;
}
public EsQuery addExcludeFields(List<String> excludes) {
this.excludes.addAll(excludes);
return this;
}
@Override
public String toString() {
return toJsonString();
}
public String toJsonString() {
Map<String, Object> finalQuery = new HashMap<>();
Map<String, Object> queryMap = new HashMap<>();
Map<String, Object> filteredMap = new HashMap<>();
Map<String, Object> filterMap = new HashMap<>();
Map<String, Object> boolMap = new HashMap<>();
List<Object> mustList = obtainTermFilterList(this.termFilter);
List<Object> mustNotList = obtainTermFilterList(this.mustNotTermFilter);
List<Object> shouldList = obtainTermFilterList(this.shouldTermFilter);
if(!this.rangeFilter.isEmpty()){
for(Map.Entry<String, Range> e: this.rangeFilter.entrySet()){
Map<String, Object> rangeMap = new HashMap<>();
Map<String, Object> rangeEntityMap = new HashMap<>();
rangeEntityMap.put(e.getKey(), e.getValue().toMap());
rangeMap.put(Constant.range, rangeEntityMap);
mustList.add(rangeMap);
}
}
if(!this.matchFilter.isEmpty()){
this.matchF |