use of com.qlangtech.tis.runtime.module.action.IParamGetter in project tis by qlangtech.
the class QueryIndexServlet method createQueryResutStrategy.
public static // , boolean queryResultAware
QueryResutStrategy createQueryResutStrategy(// , boolean queryResultAware
AppDomainInfo domain, // , boolean queryResultAware
final HttpServletRequest request, final HttpServletResponse resp, RunContext runContext) {
final SolrQueryModuleCreatorAdapter creatorAdapter = new SolrQueryModuleCreatorAdapter() {
@Override
public boolean schemaAware() {
return false;
}
@Override
public SolrParams build(IParamGetter params, final String querystr, final String sort, final String[] fqs, final Integer shownumf, final List<String> showFields) {
SolrQuery query = new SolrQuery();
// 增加排序字段
if (StringUtils.isNotBlank(sort)) {
query.add(CommonParams.SORT, sort);
}
// query.add(CommonParams.Q, querystr);
query.setQuery(querystr);
if (fqs != null) {
for (String fq : fqs) {
query.add(CommonParams.FQ, fq);
}
}
boolean facet = params.getBoolean(FacetParams.FACET);
if (facet) {
String facetField = params.getString(FacetParams.FACET_FIELD);
if (StringUtils.isNotEmpty(facetField)) {
query.addFacetField(facetField);
}
String facetQuery = params.getString(FacetParams.FACET_QUERY);
if (StringUtils.isNotEmpty(facetQuery)) {
query.addFacetQuery(facetQuery);
}
String facetPrefix = params.getString(FacetParams.FACET_PREFIX);
if (StringUtils.isNotEmpty(facetPrefix)) {
query.setFacetPrefix(facetPrefix);
}
}
query.add(CommonParams.START, params.getString(CommonParams.START, "0"));
// 默认显示前三行
query.setRows(shownumf);
// query.add(CommonParams.ROWS, String.valueOf(shownumf));
query.add(CommonParams.VERSION, "2.2");
query.add(CommonParams.WT, "xml");
boolean distrib = params.getBoolean(CommonParams.DISTRIB);
query.add(CommonParams.DISTRIB, String.valueOf(distrib));
if (showFields.isEmpty()) {
if (distrib) {
query.setFields("*", FIELD_SHARD);
}
} else {
for (String field : showFields) {
query.addField(field);
}
if (distrib) {
query.addField(FIELD_SHARD);
}
}
query.setShowDebugInfo(params.getBoolean(CommonParams.DEBUG));
return query;
}
@Override
public ParseResult processSchema(InputStream schemaStream) {
try {
// SolrFieldsParser schemaParser = new SolrFieldsParser();
ParseResult parseResult = SolrFieldsParser.parse(() -> IOUtils.toByteArray(schemaStream)).getSchemaParseResult();
return parseResult;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@Override
public String[] getParameterValues(String keyname) {
return request.getParameterValues(keyname);
}
@Override
public void handleError(String url, ServerJoinGroup server, long allcount, Exception e) {
synchronized (resp) {
try {
String serverInfo = "[" + server.getGroupIndex() + "]" + server.getIp();
flushResult(resp, request, Arrays.asList(convert2Html("url:" + url + "<br/>" + getErrorContent(e), serverInfo)), allcount);
} catch (IOException e1) {
}
}
}
@Override
public void processResult(QueryRequestContext qrequest, QueryResponse result, ServerJoinGroup server) throws Exception {
flushResult(resp, qrequest.request, convert2Html(qrequest, result, server, false), qrequest.resultCount.get());
}
@Override
public void processResult(QueryRequestContext qrequest, List<Row> rows) throws Exception {
flushResult(resp, qrequest.request, rows, qrequest.resultCount.get());
}
@Override
public void setQuerySelectServerCandiate(Map<String, List<ServerJoinGroup>> servers) {
request.setAttribute("querySelectServerCandiate", servers);
}
};
final QueryResutStrategy queryResutStrategy = SolrCloudQueryResutStrategy.create(domain, creatorAdapter, runContext);
return queryResutStrategy;
}
Aggregations