add fabric facet for search

This commit is contained in:
Na Zhang 2018-09-10 14:16:27 -07:00
parent 67ccb31c65
commit d14911c231
4 changed files with 85 additions and 11 deletions

View File

@ -176,7 +176,7 @@ public class SearchDao {
} }
public JsonNode elasticSearchDatasetByKeyword(String elasticSearchUrl, String category, String keywords, public JsonNode elasticSearchDatasetByKeyword(String elasticSearchUrl, String category, String keywords,
String source, int page, int size) { String source, int page, int size, String fabric) {
ObjectNode queryNode = _OM.createObjectNode(); ObjectNode queryNode = _OM.createObjectNode();
queryNode.put("from", (page - 1) * size); queryNode.put("from", (page - 1) * size);
queryNode.put("size", size); queryNode.put("size", size);
@ -202,7 +202,7 @@ public class SearchDao {
ObjectNode filterNode = _OM.createObjectNode(); ObjectNode filterNode = _OM.createObjectNode();
try { try {
filterNode = generateElasticSearchFilterString(source); filterNode = generateElasticSearchFilterString(source, fabric);
} catch (Exception e) { } catch (Exception e) {
log.error("Elastic search filter query node generation failed :" + e.getMessage()); log.error("Elastic search filter query node generation failed :" + e.getMessage());
} }
@ -214,7 +214,7 @@ public class SearchDao {
log.info(" === elasticSearchDatasetByKeyword === The query sent to Elastic Search is: " + queryNode.toString()); log.info(" === elasticSearchDatasetByKeyword === The query sent to Elastic Search is: " + queryNode.toString());
responseNode = HttpUtil.httpPostRequest(elasticSearchUrl, queryNode); responseNode = HttpUtil.httpPostRequest(elasticSearchUrl, queryNode);
// Logger.debug("The responseNode from Elastic Search is: " + responseNode.toString());
} catch (IOException e) { } catch (IOException e) {
log.error("Elastic search dataset query error: {}", e.toString()); log.error("Elastic search dataset query error: {}", e.toString());
} }

View File

@ -39,13 +39,21 @@ public class Search {
private final static String FLOW_CATEGORY = "flows"; private final static String FLOW_CATEGORY = "flows";
private final static String JOB_CATEGORY = "jobs"; private final static String JOB_CATEGORY = "jobs";
private static final String WHZ_ELASTICSEARCH_DATASET_QUERY_FILE = System.getenv("WHZ_ELASTICSEARCH_DATASET_QUERY_TEMPLATE"); private static final String WHZ_ELASTICSEARCH_DATASET_QUERY_FILE =
private static final String WHZ_ELASTICSEARCH_METRIC_QUERY_FILE = System.getenv("WHZ_ELASTICSEARCH_METRIC_QUERY_TEMPLATE"); System.getenv("WHZ_ELASTICSEARCH_DATASET_QUERY_TEMPLATE");
private static final String WHZ_ELASTICSEARCH_FLOW_QUERY_FILE = System.getenv("WHZ_ELASTICSEARCH_FLOW_QUERY_TEMPLATE"); private static final String WHZ_ELASTICSEARCH_METRIC_QUERY_FILE =
private static final String WHZ_ELASTICSEARCH_COMMENT_QUERY_FILE = System.getenv("WHZ_ELASTICSEARCH_COMMENT_QUERY_TEMPLATE"); System.getenv("WHZ_ELASTICSEARCH_METRIC_QUERY_TEMPLATE");
private static final String WHZ_ELASTICSEARCH_SUGGESTER_QUERY_FILE = System.getenv("WHZ_ELASTICSEARCH_SUGGESTER_QUERY_TEMPLATE"); private static final String WHZ_ELASTICSEARCH_FLOW_QUERY_FILE =
private static final String WHZ_ELASTICSEARCH_AUTO_COMPLETION_QUERY_FILE = System.getenv("WHZ_ELASTICSEARCH_AUTO_COMPLETION_QUERY_TEMPLATE"); System.getenv("WHZ_ELASTICSEARCH_FLOW_QUERY_TEMPLATE");
private static final String WHZ_ELASTICSEARCH_COMMENT_QUERY_FILE =
System.getenv("WHZ_ELASTICSEARCH_COMMENT_QUERY_TEMPLATE");
private static final String WHZ_ELASTICSEARCH_SUGGESTER_QUERY_FILE =
System.getenv("WHZ_ELASTICSEARCH_SUGGESTER_QUERY_TEMPLATE");
private static final String WHZ_ELASTICSEARCH_AUTO_COMPLETION_QUERY_FILE =
System.getenv("WHZ_ELASTICSEARCH_AUTO_COMPLETION_QUERY_TEMPLATE");
private static final String WHZ_ELASTICSEARCH_FILTER_UNIT_FILE = System.getenv("WHZ_ELASTICSEARCH_FILTER_UNIT"); private static final String WHZ_ELASTICSEARCH_FILTER_UNIT_FILE = System.getenv("WHZ_ELASTICSEARCH_FILTER_UNIT");
private static final String WHZ_ELASTICSEARCH_FILTER_UNIT_FILE_FABRIC =
System.getenv("WHZ_ELASTICSEARCH_FILTER_UNIT_FABRIC");
public static String readJsonQueryFile(String jsonFile) { public static String readJsonQueryFile(String jsonFile) {
try { try {
@ -147,7 +155,7 @@ public class Search {
return queryNode; return queryNode;
} }
public static ObjectNode generateElasticSearchFilterString(String sources) throws IOException { public static ObjectNode generateESFilterStringForSources(String sources) throws IOException {
if (StringUtils.isBlank(sources)) { if (StringUtils.isBlank(sources)) {
return null; return null;
} }
@ -171,4 +179,57 @@ public class Search {
return queryNode; return queryNode;
} }
public static ObjectNode generateESFilterStringForFabrics(String fabrics) throws IOException {
if (StringUtils.isBlank(fabrics)) {
return null;
}
List<JsonNode> shouldValueList = new ArrayList<JsonNode>();
String queryTemplate = readJsonQueryFile(WHZ_ELASTICSEARCH_FILTER_UNIT_FILE_FABRIC);
String[] values = fabrics.trim().split(",");
for (String value : values) {
if (StringUtils.isNotBlank(value)) {
String query = queryTemplate.replace("$FABRIC", value.replace("\"", "").toLowerCase().trim());
shouldValueList.add(_OM.readTree(query));
}
}
ObjectNode shouldNode = _OM.createObjectNode();
shouldNode.putPOJO("should", shouldValueList);
ObjectNode queryNode = _OM.createObjectNode();
queryNode.putPOJO("bool", shouldNode);
return queryNode;
}
public static ObjectNode generateElasticSearchFilterString(String sources, String fabrics) throws Exception {
ObjectNode sourcesNode = generateESFilterStringForSources(sources);
ObjectNode fabricsNode = generateESFilterStringForFabrics(fabrics);
if (sourcesNode == null && fabricsNode == null) {
return null;
}
List<JsonNode> mustValueList = new ArrayList<JsonNode>();
if (sourcesNode != null) {
mustValueList.add(generateESFilterStringForSources(sources));
}
if (fabricsNode != null) {
mustValueList.add(generateESFilterStringForFabrics(fabrics));
}
ObjectNode mustNode = _OM.createObjectNode();
mustNode.putPOJO("must", mustValueList);
ObjectNode queryNode = _OM.createObjectNode();
queryNode.putPOJO("bool", mustNode);
return queryNode;
}
} }

View File

@ -0,0 +1,5 @@
{
"match": {
"dataorigin": "$FABRIC"
}
}

View File

@ -96,6 +96,8 @@ public class Search extends Controller {
String category = request().getQueryString("category"); String category = request().getQueryString("category");
String source = request().getQueryString("source"); String source = request().getQueryString("source");
String pageStr = request().getQueryString("page"); String pageStr = request().getQueryString("page");
String fabric = request().getQueryString("fabric");
if (isBlank(pageStr)) { if (isBlank(pageStr)) {
page = 1; page = 1;
} else { } else {
@ -124,12 +126,18 @@ public class Search extends Controller {
if (isBlank(category)) { if (isBlank(category)) {
category = "datasets"; category = "datasets";
} }
// Filter on platform
if (isBlank(source) || source.equalsIgnoreCase("all") || source.equalsIgnoreCase("default")) { if (isBlank(source) || source.equalsIgnoreCase("all") || source.equalsIgnoreCase("default")) {
source = null; source = null;
} }
// Filter on fabric
if (isBlank(fabric) || fabric.equalsIgnoreCase("all") || fabric.equalsIgnoreCase("default")) {
fabric = null;
}
result.set("result", result.set("result",
SEARCH_DAO.elasticSearchDatasetByKeyword(ELASTICSEARCH_DATASET_URL, category, keyword, source, page, size)); SEARCH_DAO.elasticSearchDatasetByKeyword(ELASTICSEARCH_DATASET_URL, category, keyword, source, page, size, fabric));
return ok(result); return ok(result);
} }