ElasticSqlParseResult.java 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. package org.elasticsearch.dsl.bean;
  2. import org.apache.commons.collections.CollectionUtils;
  3. import org.apache.commons.lang.StringUtils;
  4. import org.elasticsearch.action.search.SearchRequestBuilder;
  5. import org.elasticsearch.client.Client;
  6. import org.elasticsearch.index.query.BoolFilterBuilder;
  7. import org.elasticsearch.index.query.QueryBuilders;
  8. import org.elasticsearch.search.aggregations.AbstractAggregationBuilder;
  9. import org.elasticsearch.search.aggregations.AggregationBuilder;
  10. import org.elasticsearch.search.sort.SortBuilder;
  11. import org.elasticsearch.util.ElasticMockClient;
  12. import java.util.List;
  13. public class ElasticSqlParseResult {
  14. /*取数开始位置*/
  15. private int from = 0;
  16. /*取数大小*/
  17. private int size = 15;
  18. /*查询索引*/
  19. private List<String> indices;
  20. /*查询文档类*/
  21. private String type;
  22. /*查询索引别名*/
  23. private String queryAs;
  24. /*查询路由值*/
  25. private List<String> routingBy;
  26. /*查询字段列表*/
  27. private List<String> queryFieldList;
  28. /*SQL的where条件*/
  29. private transient BoolFilterBuilder whereCondition;
  30. /*SQL的order by条件*/
  31. private transient List<SortBuilder> orderBy;
  32. private transient boolean isTopStatsAgg = false;
  33. private transient List<AbstractAggregationBuilder> groupBy;
  34. public List<String> getQueryFieldList() {
  35. return queryFieldList;
  36. }
  37. public void setQueryFieldList(List<String> queryFieldList) {
  38. this.queryFieldList = queryFieldList;
  39. }
  40. public List<String> getIndices() {
  41. return indices;
  42. }
  43. public void setIndices(List<String> indices) {
  44. this.indices = indices;
  45. }
  46. public String getType() {
  47. return type;
  48. }
  49. public void setType(String type) {
  50. this.type = type;
  51. }
  52. public int getFrom() {
  53. return from;
  54. }
  55. public void setFrom(int from) {
  56. this.from = from;
  57. }
  58. public int getSize() {
  59. return size;
  60. }
  61. public void setSize(int size) {
  62. this.size = size;
  63. }
  64. public String getQueryAs() {
  65. return queryAs;
  66. }
  67. public void setQueryAs(String queryAs) {
  68. this.queryAs = queryAs;
  69. }
  70. public BoolFilterBuilder getWhereCondition() {
  71. return whereCondition;
  72. }
  73. public void setWhereCondition(BoolFilterBuilder whereCondition) {
  74. this.whereCondition = whereCondition;
  75. }
  76. public List<SortBuilder> getOrderBy() {
  77. return orderBy;
  78. }
  79. public void setOrderBy(List<SortBuilder> orderBy) {
  80. this.orderBy = orderBy;
  81. }
  82. public List<String> getRoutingBy() {
  83. return routingBy;
  84. }
  85. public void setRoutingBy(List<String> routingBy) {
  86. this.routingBy = routingBy;
  87. }
  88. public void setGroupBy(List<AbstractAggregationBuilder> groupBy) {
  89. this.groupBy = groupBy;
  90. }
  91. public List<AbstractAggregationBuilder> getGroupBy() {
  92. return groupBy;
  93. }
  94. public void setTopStatsAgg() {
  95. this.isTopStatsAgg = true;
  96. }
  97. public boolean getIsTopStatsAgg() {
  98. return isTopStatsAgg;
  99. }
  100. public SearchRequestBuilder toRequest(Client client) {
  101. SearchRequestBuilder requestBuilder = new SearchRequestBuilder(client);
  102. requestBuilder.setFrom(from).setSize(size);
  103. if (CollectionUtils.isNotEmpty(indices)) {
  104. requestBuilder.setIndices(indices.toArray(new String[indices.size()]));
  105. }
  106. if (StringUtils.isNotBlank(type)) {
  107. requestBuilder.setTypes(type);
  108. }
  109. if (whereCondition != null && whereCondition.hasClauses()) {
  110. requestBuilder.setQuery(QueryBuilders.filteredQuery(null, whereCondition));
  111. } else {
  112. requestBuilder.setQuery(QueryBuilders.matchAllQuery());
  113. }
  114. if (CollectionUtils.isNotEmpty(orderBy)) {
  115. for (SortBuilder sortBuilder : orderBy) {
  116. requestBuilder.addSort(sortBuilder);
  117. }
  118. }
  119. if (CollectionUtils.isNotEmpty(queryFieldList)) {
  120. requestBuilder.setFetchSource(queryFieldList.toArray(new String[queryFieldList.size()]), null);
  121. }
  122. if (CollectionUtils.isNotEmpty(routingBy)) {
  123. requestBuilder.setRouting(routingBy.toArray(new String[routingBy.size()]));
  124. }
  125. if (CollectionUtils.isNotEmpty(groupBy)) {
  126. if (!getIsTopStatsAgg()) {
  127. AggregationBuilder preAgg = null;
  128. for (AbstractAggregationBuilder aggItem : groupBy) {
  129. if (preAgg == null) {
  130. preAgg = (AggregationBuilder) aggItem;
  131. continue;
  132. }
  133. preAgg.subAggregation(aggItem);
  134. preAgg = (AggregationBuilder) aggItem;
  135. }
  136. requestBuilder.addAggregation(groupBy.get(0));
  137. } else {
  138. for (AbstractAggregationBuilder aggItem : groupBy) {
  139. requestBuilder.addAggregation(aggItem);
  140. }
  141. }
  142. }
  143. return requestBuilder;
  144. }
  145. public String toDsl(Client client) {
  146. return toRequest(client).toString();
  147. }
  148. public String toDsl() {
  149. return toDsl(ElasticMockClient.get());
  150. }
  151. @Override
  152. public String toString() {
  153. String ptn = "index:%s,type:%s,query_as:%s,from:%s,size:%s,routing:%s,dsl:%s";
  154. return String.format(ptn, indices, type, queryAs, from, size, routingBy != null ? routingBy.toString() : "[]", toDsl());
  155. }
  156. }