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;
33 * Build a JSON payload to send to elastic search to get vnf search data.
36 public class VnfSearchQueryBuilder {
40 * Creates the suggestions query.
42 * @param maxResults maximum number of suggestions to fetch
43 * @param queryStr query string
44 * @return the json object
48 * { "vnfs" : { "text" : "VNFs", "completion" : { "field" : "entity_suggest", "size": 1 } } }
50 public static JsonObject createSuggestionsQuery(String maxResults, String queryStr) {
51 JsonObjectBuilder jsonBuilder = Json.createObjectBuilder();
53 JsonObjectBuilder completionBlob = Json.createObjectBuilder();
54 completionBlob.add("field", "entity_suggest");
55 completionBlob.add("size", maxResults);
57 JsonObjectBuilder jsonAllBuilder = Json.createObjectBuilder();
58 jsonAllBuilder.add("text", queryStr);
59 jsonAllBuilder.add("completion", completionBlob);
61 jsonBuilder.add("vnfs", jsonAllBuilder.build());
62 return jsonBuilder.build();
65 public static JsonObject getTermBlob(String key, String value) {
66 JsonObjectBuilder termBlobBuilder = Json.createObjectBuilder();
67 JsonObjectBuilder jsonBuilder = Json.createObjectBuilder().add(key, value);
68 return termBlobBuilder.add("term", jsonBuilder.build()).build();
71 public static void getSummaryAggsBlob(JsonObjectBuilder aggsBlobBuilder, String aggsKey,
73 JsonObjectBuilder fieldBuilder =
74 Json.createObjectBuilder().add("field", aggsKey).add("size", resultSize);
75 JsonObject aggsFieldBlob = fieldBuilder.build();
76 JsonObjectBuilder defaultBlobBuilder = Json.createObjectBuilder().add("terms", aggsFieldBlob);
77 JsonObject defaultBlob = defaultBlobBuilder.build();
78 aggsBlobBuilder.add("default", defaultBlob);
81 public static void buildSingleTermCountQuery(JsonObjectBuilder jsonBuilder, String key,
83 jsonBuilder.add("query", getTermBlob(key, value));
86 public static void buildSingleTermSummaryQuery(JsonObjectBuilder jsonBuilder, String key,
87 String value, String groupByKey) {
88 JsonObjectBuilder queryBlobBuilder = Json.createObjectBuilder();
89 JsonObjectBuilder aggsBlobBuilder = Json.createObjectBuilder();
91 queryBlobBuilder.add("constant_score",
92 Json.createObjectBuilder().add("filter", getTermBlob(key, value)));
94 getSummaryAggsBlob(aggsBlobBuilder, groupByKey, 0);
96 jsonBuilder.add("query", queryBlobBuilder.build());
97 jsonBuilder.add("aggs", aggsBlobBuilder.build());
100 public static void buildMultiTermSummaryQuery(JsonObjectBuilder jsonBuilder,
101 Map<String, String> attributes, String groupByKey) {
102 JsonObjectBuilder queryBlobBuilder = Json.createObjectBuilder();
103 JsonObjectBuilder aggsBlobBuilder = Json.createObjectBuilder();
104 JsonArrayBuilder mustBlobBuilder = Json.createArrayBuilder();
105 for (String key : attributes.keySet()) {
106 mustBlobBuilder.add(getTermBlob(key, attributes.get(key)));
108 JsonArray mustBlob = mustBlobBuilder.build();
110 queryBlobBuilder.add("constant_score", Json.createObjectBuilder().add("filter",
111 Json.createObjectBuilder().add("bool", Json.createObjectBuilder().add("must", mustBlob))));
113 getSummaryAggsBlob(aggsBlobBuilder, groupByKey, 0);
115 jsonBuilder.add("query", queryBlobBuilder.build());
116 jsonBuilder.add("aggs", aggsBlobBuilder.build());
119 public static void buildZeroTermSummaryQuery(JsonObjectBuilder jsonBuilder, String groupByKey) {
120 JsonObjectBuilder aggsBlobBuilder = Json.createObjectBuilder();
122 getSummaryAggsBlob(aggsBlobBuilder, groupByKey, 0);
124 jsonBuilder.add("aggs", aggsBlobBuilder.build());
127 public static void buildMultiTermCountQuery(JsonObjectBuilder jsonBuilder,
128 Map<String, String> attributes) {
129 JsonArrayBuilder mustBlobBuilder = Json.createArrayBuilder();
130 for (String key : attributes.keySet()) {
131 mustBlobBuilder.add(getTermBlob(key, attributes.get(key)));
133 jsonBuilder.add("query", Json.createObjectBuilder().add("bool",
134 Json.createObjectBuilder().add("must", mustBlobBuilder)));
139 public static JsonObject createSummaryByEntityTypeQuery(Map<String, String> attributes,
141 JsonObjectBuilder jsonBuilder = Json.createObjectBuilder();
142 jsonBuilder.add("size", "0"); // avoid source data
143 if (attributes.size() == 0) {
144 buildZeroTermSummaryQuery(jsonBuilder, groupByKey);
145 } else if (attributes.size() == 1) {
146 Map.Entry<String, String> entry = attributes.entrySet().iterator().next();
147 buildSingleTermSummaryQuery(jsonBuilder, entry.getKey(), entry.getValue(), groupByKey);
149 buildMultiTermSummaryQuery(jsonBuilder, attributes, groupByKey);
151 return jsonBuilder.build();
154 public static JsonObject createEntityCountsQuery(Map<String, String> attributes) {
155 JsonObjectBuilder jsonBuilder = Json.createObjectBuilder();
156 if (attributes.size() == 1) {
157 Map.Entry<String, String> entry = attributes.entrySet().iterator().next();
158 buildSingleTermCountQuery(jsonBuilder, entry.getKey(), entry.getValue());
160 buildMultiTermCountQuery(jsonBuilder, attributes);
162 return jsonBuilder.build();
165 public static JsonArray getSortCriteria(String sortFieldName, String sortOrder) {
166 JsonArrayBuilder jsonBuilder = Json.createArrayBuilder();
167 jsonBuilder.add(Json.createObjectBuilder().add(sortFieldName,
168 Json.createObjectBuilder().add("order", sortOrder)));
170 return jsonBuilder.build();