use of org.codelibs.fess.util.FacetResponse in project fess by codelibs.
the class JsonApiManager method processSearchRequest.
protected void processSearchRequest(final HttpServletRequest request, final HttpServletResponse response, final FilterChain chain) {
final SearchHelper searchHelper = ComponentUtil.getSearchHelper();
final FessConfig fessConfig = ComponentUtil.getFessConfig();
final RelatedQueryHelper relatedQueryHelper = ComponentUtil.getRelatedQueryHelper();
final RelatedContentHelper relatedContentHelper = ComponentUtil.getRelatedContentHelper();
int status = 0;
Exception err = null;
String query = null;
// TODO replace response stream
final StringBuilder buf = new StringBuilder(1000);
request.setAttribute(Constants.SEARCH_LOG_ACCESS_TYPE, Constants.SEARCH_LOG_ACCESS_TYPE_JSON);
try {
final SearchRenderData data = new SearchRenderData();
final JsonRequestParams params = new JsonRequestParams(request, fessConfig);
query = params.getQuery();
searchHelper.search(params, data, OptionalThing.empty());
final String execTime = data.getExecTime();
final String queryTime = Long.toString(data.getQueryTime());
final String pageSize = Integer.toString(data.getPageSize());
final String currentPageNumber = Integer.toString(data.getCurrentPageNumber());
final String allRecordCount = Long.toString(data.getAllRecordCount());
final String allRecordCountRelation = data.getAllRecordCountRelation();
final String allPageCount = Integer.toString(data.getAllPageCount());
final List<Map<String, Object>> documentItems = data.getDocumentItems();
final FacetResponse facetResponse = data.getFacetResponse();
final String queryId = data.getQueryId();
final String highlightParams = data.getAppendHighlightParams();
final boolean nextPage = data.isExistNextPage();
final boolean prevPage = data.isExistPrevPage();
final long startRecordNumber = data.getCurrentStartRecordNumber();
final long endRecordNumber = data.getCurrentEndRecordNumber();
final List<String> pageNumbers = data.getPageNumberList();
final boolean partial = data.isPartialResults();
final String searchQuery = data.getSearchQuery();
final long requestedTime = data.getRequestedTime();
buf.append("\"q\":");
buf.append(escapeJson(query));
buf.append(",\"query_id\":");
buf.append(escapeJson(queryId));
buf.append(",\"exec_time\":");
buf.append(execTime);
buf.append(",\"query_time\":");
buf.append(queryTime);
buf.append(',');
buf.append("\"page_size\":");
buf.append(pageSize);
buf.append(',');
buf.append("\"page_number\":");
buf.append(currentPageNumber);
buf.append(',');
buf.append("\"record_count\":");
buf.append(allRecordCount);
buf.append(',');
buf.append("\"record_count_relation\":");
buf.append(escapeJson(allRecordCountRelation));
buf.append(',');
buf.append("\"page_count\":");
buf.append(allPageCount);
buf.append(",\"highlight_params\":");
buf.append(escapeJson(highlightParams));
buf.append(",\"next_page\":");
buf.append(escapeJson(nextPage));
buf.append(",\"prev_page\":");
buf.append(escapeJson(prevPage));
buf.append(",\"start_record_number\":");
buf.append(startRecordNumber);
buf.append(",\"end_record_number\":");
buf.append(escapeJson(endRecordNumber));
buf.append(",\"page_numbers\":");
buf.append(escapeJson(pageNumbers));
buf.append(",\"partial\":");
buf.append(escapeJson(partial));
buf.append(",\"search_query\":");
buf.append(escapeJson(searchQuery));
buf.append(",\"requested_time\":");
buf.append(requestedTime);
final String[] relatedQueries = relatedQueryHelper.getRelatedQueries(params.getQuery());
buf.append(",\"related_query\":");
buf.append(escapeJson(relatedQueries));
final String[] relatedContents = relatedContentHelper.getRelatedContents(params.getQuery());
buf.append(",\"related_contents\":");
buf.append(escapeJson(relatedContents));
buf.append(',');
buf.append("\"result\":[");
if (!documentItems.isEmpty()) {
boolean first1 = true;
for (final Map<String, Object> document : documentItems) {
if (!first1) {
buf.append(',');
} else {
first1 = false;
}
buf.append('{');
boolean first2 = true;
for (final Map.Entry<String, Object> entry : document.entrySet()) {
final String name = entry.getKey();
if (StringUtil.isNotBlank(name) && entry.getValue() != null && ComponentUtil.getQueryHelper().isApiResponseField(name)) {
if (!first2) {
buf.append(',');
} else {
first2 = false;
}
buf.append(escapeJson(name));
buf.append(':');
buf.append(escapeJson(entry.getValue()));
}
}
buf.append('}');
}
}
buf.append(']');
if (facetResponse != null && facetResponse.hasFacetResponse()) {
// facet field
buf.append(',');
buf.append("\"facet_field\":[");
if (facetResponse.getFieldList() != null) {
boolean first1 = true;
for (final Field field : facetResponse.getFieldList()) {
if (!first1) {
buf.append(',');
} else {
first1 = false;
}
buf.append("{\"name\":");
buf.append(escapeJson(field.getName()));
buf.append(",\"result\":[");
boolean first2 = true;
for (final Map.Entry<String, Long> entry : field.getValueCountMap().entrySet()) {
if (!first2) {
buf.append(',');
} else {
first2 = false;
}
buf.append("{\"value\":");
buf.append(escapeJson(entry.getKey()));
buf.append(",\"count\":");
buf.append(entry.getValue());
buf.append('}');
}
buf.append(']');
buf.append('}');
}
}
buf.append(']');
// facet q
buf.append(',');
buf.append("\"facet_query\":[");
if (facetResponse.getQueryCountMap() != null) {
boolean first1 = true;
for (final Map.Entry<String, Long> entry : facetResponse.getQueryCountMap().entrySet()) {
if (!first1) {
buf.append(',');
} else {
first1 = false;
}
buf.append("{\"value\":");
buf.append(escapeJson(entry.getKey()));
buf.append(",\"count\":");
buf.append(entry.getValue());
buf.append('}');
}
}
buf.append(']');
}
} catch (final Exception e) {
status = 1;
err = e;
if (logger.isDebugEnabled()) {
logger.debug("Failed to process a search request.", e);
}
}
writeJsonResponse(status, buf.toString(), err);
}
use of org.codelibs.fess.util.FacetResponse in project fess by codelibs.
the class ViewHelper method getCachedFacetResponse.
public FacetResponse getCachedFacetResponse(final String query) {
final OptionalThing<FessUserBean> userBean = ComponentUtil.getComponent(FessLoginAssist.class).getSavedUserBean();
final String permissionKey = userBean.map(user -> StreamUtil.stream(user.getPermissions()).get(stream -> stream.sorted().distinct().collect(Collectors.joining("\n")))).orElse(StringUtil.EMPTY);
try {
return facetCache.get(query + "\n" + permissionKey, () -> {
final SearchHelper searchHelper = ComponentUtil.getSearchHelper();
final SearchForm params = new SearchForm() {
@Override
public int getPageSize() {
return 0;
}
@Override
public int getStartPosition() {
return 0;
}
};
params.q = query;
final SearchRenderData data = new SearchRenderData();
searchHelper.search(params, data, userBean);
if (logger.isDebugEnabled()) {
logger.debug("loaded facet data: {}", data);
}
return data.getFacetResponse();
});
} catch (final ExecutionException e) {
throw new FessSystemException("Cannot load facet from cache.", e);
}
}
Aggregations