2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
6 * Copyright © 2017-2018 Amdocs
7 * ================================================================================
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 * ============LICENSE_END=========================================================
21 package org.onap.aai.sparky.aggregatevnf.search;
25 import javax.json.Json;
26 import javax.json.JsonArray;
27 import javax.json.JsonArrayBuilder;
28 import javax.json.JsonObject;
29 import javax.json.JsonObjectBuilder;
32 * Build a JSON payload to send to elastic search to get vnf search data.
35 public class VnfSearchQueryBuilder {
38 * Creates the suggestions query.
40 * @param maxResults maximum number of suggestions to fetch
41 * @param queryStr query string
42 * @return the json object
46 * { "vnfs" : { "text" : "VNFs", "completion" : { "field" : "entity_suggest", "size": 1 } } }
48 public static JsonObject createSuggestionsQuery(String maxResults, String queryStr) {
49 JsonObjectBuilder jsonBuilder = Json.createObjectBuilder();
51 JsonObjectBuilder completionBlob = Json.createObjectBuilder();
52 completionBlob.add("field", "entity_suggest");
53 completionBlob.add("size", maxResults);
55 JsonObjectBuilder jsonAllBuilder = Json.createObjectBuilder();
56 jsonAllBuilder.add("text", queryStr);
57 jsonAllBuilder.add("completion", completionBlob);
59 jsonBuilder.add("vnfs", jsonAllBuilder.build());
60 return jsonBuilder.build();
63 public static JsonObject getTermBlob(String key, String value) {
64 JsonObjectBuilder termBlobBuilder = Json.createObjectBuilder();
65 JsonObjectBuilder jsonBuilder = Json.createObjectBuilder().add(key, value);
66 return termBlobBuilder.add("term", jsonBuilder.build()).build();
69 public static void getSummaryAggsBlob(JsonObjectBuilder aggsBlobBuilder, String aggsKey,
71 JsonObjectBuilder fieldBuilder =
72 Json.createObjectBuilder().add("field", aggsKey).add("size", resultSize);
73 JsonObject aggsFieldBlob = fieldBuilder.build();
74 JsonObjectBuilder defaultBlobBuilder = Json.createObjectBuilder().add("terms", aggsFieldBlob);
75 JsonObject defaultBlob = defaultBlobBuilder.build();
76 aggsBlobBuilder.add("default", defaultBlob);
79 public static void buildSingleTermCountQuery(JsonObjectBuilder jsonBuilder, String key,
81 jsonBuilder.add("query", getTermBlob(key, value));
84 public static void buildSingleTermSummaryQuery(JsonObjectBuilder jsonBuilder, String key,
85 String value, String groupByKey) {
86 JsonObjectBuilder queryBlobBuilder = Json.createObjectBuilder();
87 JsonObjectBuilder aggsBlobBuilder = Json.createObjectBuilder();
89 queryBlobBuilder.add("constant_score",
90 Json.createObjectBuilder().add("filter", getTermBlob(key, value)));
92 getSummaryAggsBlob(aggsBlobBuilder, groupByKey, 0);
94 jsonBuilder.add("query", queryBlobBuilder.build());
95 jsonBuilder.add("aggs", aggsBlobBuilder.build());
98 public static void buildMultiTermSummaryQuery(JsonObjectBuilder jsonBuilder,
99 Map<String, String> attributes, String groupByKey) {
100 JsonObjectBuilder queryBlobBuilder = Json.createObjectBuilder();
101 JsonObjectBuilder aggsBlobBuilder = Json.createObjectBuilder();
102 JsonArrayBuilder mustBlobBuilder = Json.createArrayBuilder();
103 for (String key : attributes.keySet()) {
104 mustBlobBuilder.add(getTermBlob(key, attributes.get(key)));
106 JsonArray mustBlob = mustBlobBuilder.build();
108 queryBlobBuilder.add("constant_score", Json.createObjectBuilder().add("filter",
109 Json.createObjectBuilder().add("bool", Json.createObjectBuilder().add("must", mustBlob))));
111 getSummaryAggsBlob(aggsBlobBuilder, groupByKey, 0);
113 jsonBuilder.add("query", queryBlobBuilder.build());
114 jsonBuilder.add("aggs", aggsBlobBuilder.build());
117 public static void buildZeroTermSummaryQuery(JsonObjectBuilder jsonBuilder, String groupByKey) {
118 JsonObjectBuilder aggsBlobBuilder = Json.createObjectBuilder();
120 getSummaryAggsBlob(aggsBlobBuilder, groupByKey, 0);
122 jsonBuilder.add("aggs", aggsBlobBuilder.build());
125 public static void buildMultiTermCountQuery(JsonObjectBuilder jsonBuilder,
126 Map<String, String> attributes) {
127 JsonArrayBuilder mustBlobBuilder = Json.createArrayBuilder();
128 for (String key : attributes.keySet()) {
129 mustBlobBuilder.add(getTermBlob(key, attributes.get(key)));
131 jsonBuilder.add("query", Json.createObjectBuilder().add("bool",
132 Json.createObjectBuilder().add("must", mustBlobBuilder)));
135 public static JsonObject createSummaryByEntityTypeQuery(Map<String, String> attributes,
137 JsonObjectBuilder jsonBuilder = Json.createObjectBuilder();
138 jsonBuilder.add("size", "0"); // avoid source data
139 if (attributes.size() == 0) {
140 buildZeroTermSummaryQuery(jsonBuilder, groupByKey);
141 } else if (attributes.size() == 1) {
142 Map.Entry<String, String> entry = attributes.entrySet().iterator().next();
143 buildSingleTermSummaryQuery(jsonBuilder, entry.getKey(), entry.getValue(), groupByKey);
145 buildMultiTermSummaryQuery(jsonBuilder, attributes, groupByKey);
147 return jsonBuilder.build();
150 public static JsonObject createEntityCountsQuery(Map<String, String> attributes) {
151 JsonObjectBuilder jsonBuilder = Json.createObjectBuilder();
152 if (attributes.size() == 1) {
153 Map.Entry<String, String> entry = attributes.entrySet().iterator().next();
154 buildSingleTermCountQuery(jsonBuilder, entry.getKey(), entry.getValue());
156 buildMultiTermCountQuery(jsonBuilder, attributes);
158 return jsonBuilder.build();
161 public static JsonArray getSortCriteria(String sortFieldName, String sortOrder) {
162 JsonArrayBuilder jsonBuilder = Json.createArrayBuilder();
163 jsonBuilder.add(Json.createObjectBuilder().add(sortFieldName,
164 Json.createObjectBuilder().add("order", sortOrder)));
166 return jsonBuilder.build();