Search in sources :

Example 1 with IParamGetter

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;
}
Also used : ParseResult(com.qlangtech.tis.solrdao.impl.ParseResult) InputStream(java.io.InputStream) IOException(java.io.IOException) SolrQuery(org.apache.solr.client.solrj.SolrQuery) ServletException(javax.servlet.ServletException) MalformedURLException(java.net.MalformedURLException) IOException(java.io.IOException) ExecutionException(java.util.concurrent.ExecutionException) QueryRequestContext(com.qlangtech.tis.runtime.module.screen.IndexQuery.QueryRequestContext) QueryResponse(org.apache.solr.client.solrj.response.QueryResponse) SolrDocumentList(org.apache.solr.common.SolrDocumentList) IParamGetter(com.qlangtech.tis.runtime.module.action.IParamGetter) SimpleOrderedMap(org.apache.solr.common.util.SimpleOrderedMap)

Aggregations

IParamGetter (com.qlangtech.tis.runtime.module.action.IParamGetter)1 QueryRequestContext (com.qlangtech.tis.runtime.module.screen.IndexQuery.QueryRequestContext)1 ParseResult (com.qlangtech.tis.solrdao.impl.ParseResult)1 IOException (java.io.IOException)1 InputStream (java.io.InputStream)1 MalformedURLException (java.net.MalformedURLException)1 ExecutionException (java.util.concurrent.ExecutionException)1 ServletException (javax.servlet.ServletException)1 SolrQuery (org.apache.solr.client.solrj.SolrQuery)1 QueryResponse (org.apache.solr.client.solrj.response.QueryResponse)1 SolrDocumentList (org.apache.solr.common.SolrDocumentList)1 SimpleOrderedMap (org.apache.solr.common.util.SimpleOrderedMap)1