package org.jeecg.common.es; /** * 用于创建 ElasticSearch 的 queryString * * @author sunjianlei */ public class QueryStringBuilder { StringBuilder builder; public QueryStringBuilder(String field, String str, boolean not, boolean addQuot) { builder = this.createBuilder(field, str, not, addQuot); } public QueryStringBuilder(String field, String str, boolean not) { builder = this.createBuilder(field, str, not, true); } /** * 创建 StringBuilder * * @param field * @param str * @param not 是否是不匹配 * @param addQuot 是否添加双引号 * @return */ public StringBuilder createBuilder(String field, String str, boolean not, boolean addQuot) { StringBuilder sb = new StringBuilder(field).append(":("); if (not) { sb.append(" NOT "); } this.addQuotEffect(sb, str, addQuot); return sb; } public QueryStringBuilder and(String str) { return this.and(str, true); } public QueryStringBuilder and(String str, boolean addQuot) { builder.append(" AND "); this.addQuot(str, addQuot); return this; } public QueryStringBuilder or(String str) { return this.or(str, true); } public QueryStringBuilder or(String str, boolean addQuot) { builder.append(" OR "); this.addQuot(str, addQuot); return this; } public QueryStringBuilder not(String str) { return this.not(str, true); } public QueryStringBuilder not(String str, boolean addQuot) { builder.append(" NOT "); this.addQuot(str, addQuot); return this; } /** * 添加双引号(模糊查询,不能加双引号) */ private QueryStringBuilder addQuot(String str, boolean addQuot) { return this.addQuotEffect(this.builder, str, addQuot); } /** * 是否在两边加上双引号 * @param builder * @param str * @param addQuot * @return */ private QueryStringBuilder addQuotEffect(StringBuilder builder, String str, boolean addQuot) { if (addQuot) { builder.append('"'); } builder.append(str); if (addQuot) { builder.append('"'); } return this; } @Override public String toString() { return builder.append(")").toString(); } }