elasticsearch應用於產品列表

来源:http://www.cnblogs.com/whuthxb/archive/2017/02/04/6364526.html
-Advertisement-
Play Games

上述代碼是產品列表涉及的主要服務方法,下麵是具體實現: 產品列表的列表返回對象為: elasticsearchHelper類: ...


package com.linkwee.web.service;

import java.util.List;

import com.linkwee.api.request.cim.ProductPageListClassifyRequest;
import com.linkwee.api.request.cim.ProductPageListRecommendRequest;
import com.linkwee.api.request.cim.ProductPageListRequest;
import com.linkwee.api.request.cim.ScreenProductPageListRequest;
import com.linkwee.api.response.cim.ProductPageListResponse;
import com.linkwee.core.orm.paging.Page;

public interface ElasticsearchProductService {

    /**
     * 查詢產品列表
     * @param productPageListRequest
     * @param page
     * @return
     */
    public List<ProductPageListResponse> elasticSearchQueryProductPageList(ProductPageListRequest productPageListRequest,Page<ProductPageListResponse> page);

    /**
     * 產品分類列表(901,902)
     * @param productPageListClassifyRequest
     * @param page
     * @return
     */
    public List<ProductPageListResponse> elasticSearchQueryProductCateExtendsPageList(ProductPageListClassifyRequest productPageListClassifyRequest,Page<ProductPageListResponse> page);

    /**
     * 熱推產品分頁
     * @param productPageListClassifyRequest
     * @param page
     * @return
     */
    public List<ProductPageListResponse> elasticSearchQueryHotRecommendPageList(ProductPageListClassifyRequest productPageListClassifyRequest,Page<ProductPageListResponse> page);

    /**
     * 產品分類列表(產品類型表)
     * @param productPageListClassifyRequest
     * @param page
     * @return
     */
    public List<ProductPageListResponse> elasticSearchQueryProductCatePageList(ProductPageListClassifyRequest productPageListClassifyRequest,Page<ProductPageListResponse> page);

    /**
     * 用戶理財師推薦的產品列表
     * @param productPageListRecommendRequest
     * @param page
     * @return
     */
    public List<ProductPageListResponse> elasticSearchQueryRecdProductPageList(ProductPageListRecommendRequest productPageListRecommendRequest,Page<ProductPageListResponse> page);

    /**
     * 產品篩選列表分頁(PC )
     * @param productPageListRequest
     * @param page
     * @return
     */
    public List<ProductPageListResponse> elasticSearchQueryProductScreenPageList(ScreenProductPageListRequest screenProductPageListRequest,Page<ProductPageListResponse> page);
    
}

上述代碼是產品列表涉及的主要服務方法,下麵是具體實現:

package com.linkwee.web.service.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.apache.commons.lang.StringUtils;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.functionscore.ScoreFunctionBuilders;
import org.elasticsearch.index.query.support.QueryInnerHitBuilder;
import org.elasticsearch.script.Script;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.sort.FieldSortBuilder;
import org.elasticsearch.search.sort.ScoreSortBuilder;
import org.elasticsearch.search.sort.SortBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.linkwee.api.request.cim.ProductPageListClassifyRequest;
import com.linkwee.api.request.cim.ProductPageListRecommendRequest;
import com.linkwee.api.request.cim.ProductPageListRequest;
import com.linkwee.api.request.cim.ScreenProductPageListRequest;
import com.linkwee.api.response.cim.ElasticsearchProductListResponse;
import com.linkwee.api.response.cim.ProductPageListResponse;
import com.linkwee.core.orm.paging.Page;
import com.linkwee.web.model.CimOrginfo;
import com.linkwee.web.service.CimOrginfoService;
import com.linkwee.web.service.ElasticsearchProductService;
import com.linkwee.xoss.helper.ElasticsearchHelper;

/**
 * elasticSearch查詢服務
 * @author Administrator
 *
 */
@Service("elasticsearchProductService")
public class ElasticsearchProductServiceImpl implements ElasticsearchProductService{
    
    Logger LOGGER = LoggerFactory.getLogger(this.getClass());
    
    @Autowired
    private ElasticsearchHelper elasticsearchHelper;
    
    @Resource
    private CimOrginfoService cimOrginfoService;
    
    public  List<ProductPageListResponse> elasticSearchQueryProductPageList(ProductPageListRequest productPageListRequest,Page<ProductPageListResponse> page){
        List<ProductPageListResponse> productPageListResponses = new ArrayList<ProductPageListResponse>();
        try {
            TransportClient client = elasticsearchHelper.getElasticSearchClient();
            SearchRequestBuilder searchRequestBuilder = client.prepareSearch("logstash-supermarket-online").setTypes("productFull");
            BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery()
                    .must(QueryBuilders.termQuery("orgStatus", 1))
                    .must(QueryBuilders.termQuery("status", 1))
                    .must(QueryBuilders.termQuery("auditStatus", 1))
                    .must(QueryBuilders.scriptQuery(new Script("doc['buyTotalMoney'].value > doc['buyedTotalMoney'].value")));//
            if(!productPageListRequest.getIfHaveGray()){
                queryBuilder.must(QueryBuilders.termQuery("orgGrayStatus", 0));
            }
            if(StringUtils.isNotBlank(productPageListRequest.getOrgNumber())){
                queryBuilder.must(QueryBuilders.termQuery("orgNumber.raw", productPageListRequest.getOrgNumber()));
            }
            searchRequestBuilder = searchRequestBuilder.setQuery(queryBuilder);//QueryBuilders.boolQuery().filter(queryBuilder)
            SortBuilder isSallingSort = new FieldSortBuilder("isSalling").order(SortOrder.DESC);
            SortBuilder commonSort = null;
            SortBuilder timeSort = null;
            Integer cnSort = productPageListRequest.getSort();
            Integer cnOrder = productPageListRequest.getOrder();
            if(cnSort != null && cnOrder != null){
                if(cnSort == 1){
                    commonSort = new FieldSortBuilder("showIndex");
                }else if(cnSort == 2 && cnOrder == 0){
                    commonSort = new FieldSortBuilder("flowMinRate");
                }else if(cnSort == 2 && cnOrder == 1){
                    commonSort = new FieldSortBuilder("flowMaxRate");
                }else if(cnSort == 3 && cnOrder == 0){
                    commonSort = new FieldSortBuilder("deadLineMinValue");
                }else if(cnSort == 3 && cnOrder == 1){
                    commonSort = new FieldSortBuilder("deadLineMaxValue");
                }else if(cnSort == 4){
                    commonSort = new FieldSortBuilder("feeRatio");
                }
                if(cnOrder == 0){
                    commonSort.order(SortOrder.ASC);
                }else if(cnOrder == 1){
                    commonSort.order(SortOrder.DESC);
                }
                timeSort = new FieldSortBuilder("createTime").order(SortOrder.DESC);
            }
            
            searchRequestBuilder.addSort(isSallingSort);
            if(commonSort != null){
                searchRequestBuilder.addSort(commonSort);
            }
            if(timeSort != null){
                searchRequestBuilder.addSort(timeSort);
            }
            
            SearchResponse searchResponse = searchRequestBuilder.setFrom((page.getPageNo()-1)*page.getPageSize()).setSize(page.getPageSize()).get();//178271C881504FBCBF1DF80DE9944D66
            SearchHits hits = searchResponse.getHits();
            
            ObjectMapper mapper = new ObjectMapper();
            page.setTotalCount((int) hits.getTotalHits());
            page.setTotalPages((int) (hits.getTotalHits()%page.getPageSize() == 0 ? hits.getTotalHits()/page.getPageSize() : hits.getTotalHits()/page.getPageSize() +1));
            for (int i = 0; i < hits.getHits().length; i++) {
                Map<String, Object> temp = hits.getHits()[i].getSource();
                temp = elasticsearchHelper.removeUseless(temp);
                ElasticsearchProductListResponse elasticsearchProductListResponse = mapper.readValue(JSONObject.toJSON(temp).toString(), ElasticsearchProductListResponse.class);
                productPageListResponses.add(elasticsearchHelper.conversProductPageListResponses(productPageListRequest,elasticsearchProductListResponse));
            }
        } catch (Exception e) {
            LOGGER.info("elasticSearch查詢產品列表異常", e);
        }
        return productPageListResponses;
    }

    @Override
    public List<ProductPageListResponse> elasticSearchQueryProductCateExtendsPageList(ProductPageListClassifyRequest productPageListClassifyRequest,Page<ProductPageListResponse> page) {
        List<ProductPageListResponse> productPageListResponses = new ArrayList<ProductPageListResponse>();
        try {
            TransportClient client = elasticsearchHelper.getElasticSearchClient();
            SearchRequestBuilder searchRequestBuilder = client.prepareSearch("logstash-supermarket-online").setTypes("productFull");
            BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery()
                    .must(QueryBuilders.termQuery("orgStatus", 1))
                    .must(QueryBuilders.termQuery("status", 1))
                    .must(QueryBuilders.termQuery("auditStatus", 1))
                    .must(QueryBuilders.scriptQuery(new Script("doc['buyTotalMoney'].value > doc['buyedTotalMoney'].value")));//
            if(!productPageListClassifyRequest.getIfHaveGray()){
                queryBuilder.must(QueryBuilders.termQuery("orgGrayStatus", 0));
            }
            if(StringUtils.isNotBlank(productPageListClassifyRequest.getOrgNumber())){
                queryBuilder.must(QueryBuilders.termQuery("orgNumber.raw", productPageListClassifyRequest.getOrgNumber()));
            }
            if(productPageListClassifyRequest.getCateId() == 901){
                queryBuilder.must(QueryBuilders.termQuery("orgFeeType", 1));
            }else if(productPageListClassifyRequest.getCateId() == 902){
                queryBuilder.must(QueryBuilders.termQuery("orgFeeType", 2));
            }
            searchRequestBuilder = searchRequestBuilder.setQuery(queryBuilder);
            
            SortBuilder isSallingSort = new FieldSortBuilder("isSalling").order(SortOrder.DESC);
            SortBuilder commonSort = null;
            SortBuilder timeSort = null;
            Integer cnSort = productPageListClassifyRequest.getSort();
            Integer cnOrder = productPageListClassifyRequest.getOrder();
            if(cnSort != null && cnOrder != null){
                if(cnSort == 1){
                    commonSort = new FieldSortBuilder("showIndex");
                }else if(cnSort == 2 && cnOrder == 0){
                    commonSort = new FieldSortBuilder("flowMinRate");
                }else if(cnSort == 2 && cnOrder == 1){
                    commonSort = new FieldSortBuilder("flowMaxRate");
                }else if(cnSort == 3 && cnOrder == 0){
                    commonSort = new FieldSortBuilder("deadLineMinValue");
                }else if(cnSort == 3 && cnOrder == 1){
                    commonSort = new FieldSortBuilder("deadLineMaxValue");
                }else if(cnSort == 4){
                    commonSort = new FieldSortBuilder("feeRatio");
                }
                if(cnOrder == 0){
                    commonSort.order(SortOrder.ASC);
                }else if(cnOrder == 1){
                    commonSort.order(SortOrder.DESC);
                }
                timeSort = new FieldSortBuilder("createTime").order(SortOrder.DESC);
            }
            
            searchRequestBuilder.addSort(isSallingSort);
            if(commonSort != null){
                searchRequestBuilder.addSort(commonSort);
            }
            if(timeSort != null){
                searchRequestBuilder.addSort(timeSort);
            }
            
            SearchResponse searchResponse = searchRequestBuilder.setFrom((page.getPageNo()-1)*page.getPageSize()).setSize(page.getPageSize()).get();//178271C881504FBCBF1DF80DE9944D66
            SearchHits hits = searchResponse.getHits();
            
            ObjectMapper mapper = new ObjectMapper();
            page.setTotalCount((int) hits.getTotalHits());
            page.setTotalPages((int) (hits.getTotalHits()%page.getPageSize() == 0 ? hits.getTotalHits()/page.getPageSize() : hits.getTotalHits()/page.getPageSize() +1));
            for (int i = 0; i < hits.getHits().length; i++) {
                Map<String, Object> temp = hits.getHits()[i].getSource();
                temp = elasticsearchHelper.removeUseless(temp);
                ElasticsearchProductListResponse elasticsearchProductListResponse = mapper.readValue(JSONObject.toJSON(temp).toString(), ElasticsearchProductListResponse.class);
                productPageListResponses.add(elasticsearchHelper.conversProductPageListResponses(productPageListClassifyRequest,elasticsearchProductListResponse));
            }
        } catch (Exception e) {
            LOGGER.info("elasticSearch查詢產品分類列表異常", e);
        }
        return productPageListResponses;
    }

    @Override
    public List<ProductPageListResponse> elasticSearchQueryHotRecommendPageList(ProductPageListClassifyRequest productPageListClassifyRequest,Page<ProductPageListResponse> page) {
        List<ProductPageListResponse> productPageListResponses = new ArrayList<ProductPageListResponse>();
        try {
            TransportClient client = elasticsearchHelper.getElasticSearchClient();
            SearchRequestBuilder searchRequestBuilder = client.prepareSearch("logstash-supermarket-online").setTypes("productFull");
            BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery()
                    .must(QueryBuilders.termQuery("orgStatus", 1))
                    .must(QueryBuilders.termQuery("status", 1))
                    .must(QueryBuilders.termQuery("auditStatus", 1))
                    .must(QueryBuilders.termQuery("orgIsstaticproduct", 0))
                    .must(QueryBuilders.scriptQuery(new Script("doc['buyTotalMoney'].value > doc['buyedTotalMoney'].value"))).boost(0);//
            if(!productPageListClassifyRequest.getIfHaveGray()){
                queryBuilder.must(QueryBuilders.termQuery("orgGrayStatus", 0)).boost(0);
            }
            queryBuilder.must(QueryBuilders.hasChildQuery("productRef", QueryBuilders.scriptQuery(new Script("new Period(new Date().getTime(), doc['recommendTime'].value).getDays() <= 2"))).innerHit(new QueryInnerHitBuilder()).scoreMode("sum"));
            searchRequestBuilder = searchRequestBuilder.setQuery(queryBuilder);
            SortBuilder recommendTimesSort = new ScoreSortBuilder().order(SortOrder.DESC);
            //SortBuilder recommendTimesSort = new ScriptSortBuilder(new Script(""), "number").order(SortOrder.DESC);//inner_hits.productRef.hits.total
            searchRequestBuilder.addSort(recommendTimesSort);
            SearchResponse searchResponse = searchRequestBuilder.setFrom((page.getPageNo()-1)*page.getPageSize()).setSize(page.getPageSize()).get();//178271C881504FBCBF1DF80DE9944D66
            SearchHits hits = searchResponse.getHits();
            ObjectMapper mapper = new ObjectMapper();
            page.setTotalCount((int) hits.getTotalHits());
            page.setTotalPages((int) (hits.getTotalHits()%page.getPageSize() == 0 ? hits.getTotalHits()/page.getPageSize() : hits.getTotalHits()/page.getPageSize() +1));
            for (int i = 0; i < hits.getHits().length; i++) {
                Map<String, Object> temp = hits.getHits()[i].getSource();
                //Map<String, SearchHits> tempXXX = hits.getHits()[i].getInnerHits();
                /*System.out.println(tempXXX.get("productRef").getTotalHits());
                System.out.println(hits.getHits()[i].getScore());*/
                temp = elasticsearchHelper.removeUseless(temp);
                ElasticsearchProductListResponse elasticsearchProductListResponse = mapper.readValue(JSONObject.toJSON(temp).toString(), ElasticsearchProductListResponse.class);
                productPageListResponses.add(elasticsearchHelper.conversProductPageListResponses(productPageListClassifyRequest,elasticsearchProductListResponse));
            }
        } catch (Exception e) {
            LOGGER.info("elasticSearch查詢熱推產品列表分頁異常", e);
        }
        return productPageListResponses;
    }

    @Override
    public List<ProductPageListResponse> elasticSearchQueryProductCatePageList(ProductPageListClassifyRequest productPageListClassifyRequest,Page<ProductPageListResponse> page) {
        List<ProductPageListResponse> productPageListResponses = new ArrayList<ProductPageListResponse>();
        try {
            TransportClient client = elasticsearchHelper.getElasticSearchClient();
            SearchRequestBuilder searchRequestBuilder = client.prepareSearch("logstash-supermarket-online").setTypes("productFull");
            BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery()
                    .must(QueryBuilders.termQuery("orgStatus", 1))
                    .must(QueryBuilders.termQuery("status", 1))
                    .must(QueryBuilders.termQuery("auditStatus", 1))
                    .must(QueryBuilders.scriptQuery(new Script("doc['buyTotalMoney'].value > doc['buyedTotalMoney'].value"))).boost(0);//
            if(!productPageListClassifyRequest.getIfHaveGray()){
                queryBuilder.must(QueryBuilders.termQuery("orgGrayStatus", 0).boost(0));
            }
            if(StringUtils.isNotBlank(productPageListClassifyRequest.getOrgNumber())){
                queryBuilder.must(QueryBuilders.termQuery("orgNumber.raw", productPageListClassifyRequest.getOrgNumber()).boost(0));
            }
            if(productPageListClassifyRequest.getCateId() != null){
                queryBuilder
                        .must(QueryBuilders.hasChildQuery(
                                        "productInfoCateAll",
                                        QueryBuilders.boolQuery()
                                                .must(QueryBuilders.functionScoreQuery(ScoreFunctionBuilders.fieldValueFactorFunction("sort").factor(1)))
                                                .must(QueryBuilders.boolQuery()
                                                        .must(QueryBuilders.termQuery("cateId",productPageListClassifyRequest.getCateId()))
                                                        .must(QueryBuilders.termQuery("disabled",0))
                                                        .boost(0)))
                                .innerHit(new QueryInnerHitBuilder())
                                .scoreMode("avg"));
            }
        
            searchRequestBuilder = searchRequestBuilder.setQuery(queryBuilder);
                
            SortBuilder isSallingSort = new FieldSortBuilder("isSalling").order(SortOrder.DESC);
            SortBuilder tpicSortSort = new ScoreSortBuilder().order(SortOrder.DESC);
            SortBuilder commonSort = null;
            SortBuilder timeSort = null;
            Integer cnSort = productPageListClassifyRequest.getSort();
            Integer cnOrder = productPageListClassifyRequest.getOrder();
            if(cnSort != null && cnOrder != null){
                if(cnSort == 1){
                    commonSort = new FieldSortBuilder("showIndex");
                }else if(cnSort == 2 && cnOrder == 0){
                    commonSort = new FieldSortBuilder("flowMinRate");
                }else if(cnSort == 2 && cnOrder == 1){
                    commonSort = new FieldSortBuilder("flowMaxRate");
                }else if(cnSort == 3 && cnOrder == 0){
                    commonSort = new FieldSortBuilder("deadLineMinValue");
                }else if(cnSort == 3 && cnOrder == 1){
                    commonSort = new FieldSortBuilder("deadLineMaxValue");
                }else if(cnSort == 4){
                    commonSort = new FieldSortBuilder("feeRatio");
                }
                if(cnOrder == 0){
                    commonSort.order(SortOrder.ASC);
                }else if(cnOrder == 1){
                    commonSort.order(SortOrder.DESC);
                }
                timeSort = new FieldSortBuilder("createTime").order(SortOrder.DESC);
            }
                    
            searchRequestBuilder.addSort(isSallingSort);
            searchRequestBuilder.addSort(tpicSortSort);
            if(commonSort != null){
                searchRequestBuilder.addSort(commonSort);
            }
            if(timeSort != null){
                searchRequestBuilder.addSort(timeSort);
            }
            
            SearchResponse searchResponse = searchRequestBuilder.setFrom((page.getPageNo()-1)*page.getPageSize()).setSize(page.getPageSize()).get();//178271C881504FBCBF1DF80DE9944D66
            SearchHits hits = searchResponse.getHits();
            
            ObjectMapper mapper = new ObjectMapper();
            page.setTotalCount((int) hits.getTotalHits());
            page.setTotalPages((int) (hits.getTotalHits()%page.getPageSize() == 0 ? hits.getTotalHits()/page.getPageSize() : hits.getTotalHits()/page.getPageSize() +1));
            for (int i = 0; i < hits.getHits().length; i++) {
                Map<String, Object> temp = hits.getHits()[i].getSource();
                //System.out.println(hits.getHits()[i].getScore());
                temp = elasticsearchHelper.removeUseless(temp);
                ElasticsearchProductListResponse elasticsearchProductListResponse = mapper.readValue(JSONObject.toJSON(temp).toString(), ElasticsearchProductListResponse.class);
                productPageListResponses.add(elasticsearchHelper.conversProductPageListResponses(productPageListClassifyRequest,elasticsearchProductListResponse));
            }
        } catch (Exception e) {
            LOGGER.info("elasticSearch查詢產品分類列表異常", e);
        }
        return productPageListResponses;
    }

    @Override
    public List<ProductPageListResponse> elasticSearchQueryRecdProductPageList(ProductPageListRecommendRequest productPageListRecommendRequest,Page<ProductPageListResponse> page) {
        List<ProductPageListResponse> productPageListResponses = new ArrayList<ProductPageListResponse>();
        try {
            TransportClient client = elasticsearchHelper.getElasticSearchClient();
            SearchRequestBuilder searchRequestBuilder = client.prepareSearch("logstash-supermarket-online").setTypes("productFull");
            BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery()
                    .must(QueryBuilders.termQuery("orgStatus", 1))
                    .must(QueryBuilders.termQuery("status", 1))
                    .must(QueryBuilders.termQuery("auditStatus", 1))
                    .must(QueryBuilders.scriptQuery(new Script("doc['buyTotalMoney'].value > doc['buyedTotalMoney'].value")));//
            if(!productPageListRecommendRequest.getIfHaveGray()){
                queryBuilder.must(QueryBuilders.termQuery("orgGrayStatus", 0));
            }
            if(StringUtils.isNotBlank(productPageListRecommendRequest.getOrgNumber())){
                queryBuilder.must(QueryBuilders.termQuery("orgNumber.raw", productPageListRecommendRequest.getOrgNumber()));
            }
            
            queryBuilder
                    .must(QueryBuilders
                            .hasChildQuery(
                                    "productRef",
                                    QueryBuilders.boolQuery()
                                        .must(QueryBuilders.termQuery("investorUserId", productPageListRecommendRequest.getUserId()))
                                        .must(QueryBuilders.termQuery("saleUserId", productPageListRecommendRequest.getCfplannerUserId()))
                                            )
                            .innerHit(new QueryInnerHitBuilder())
                            );

            searchRequestBuilder = searchRequestBuilder.setQuery(queryBuilder);
            
            SortBuilder commonSort = null;
            SortBuilder timeSort = null;
            Integer cnSort = productPageListRecommendRequest.getSort();
            Integer cnOrder = productPageListRecommendRequest.getOrder();
            if(cnSort != null && cnOrder != null){
                if(cnSort == 1){
                    commonSort = new FieldSortBuilder("showIndex");
                }else if(cnSort == 2 && cnOrder == 0){
                    commonSort = new FieldSortBuilder("flowMinRate");
                }else if(cnSort == 2 && cnOrder == 1){
                    commonSort = new FieldSortBuilder("flowMaxRate");
                }else if(cnSort == 3 && cnOrder == 0){
                    commonSort = new FieldSortBuilder("deadLineMinValue");
                }else if(cnSort == 3 && cnOrder == 1){
                    commonSort = new FieldSortBuilder("deadLineMaxValue");
                }else if(cnSort == 4){
                    commonSort = new FieldSortBuilder("feeRatio");
                }
                if(cnOrder == 0){
                    commonSort.order(SortOrder.ASC);
                }else if(cnOrder == 1){
                    commonSort.order(SortOrder.DESC);
                }
                timeSort = new FieldSortBuilder("createTime").order(SortOrder.DESC);
            }
                    
            if(commonSort != null){
                searchRequestBuilder.addSort(commonSort);
            }
            if(timeSort != null){
                searchRequestBuilder.addSort(timeSort);
            }
            
            SearchResponse searchResponse = searchRequestBuilder.setFrom((page.getPageNo()-1)*page.getPageSize()).setSize(page.getPageSize()).get();//178271C881504FBCBF1DF80DE9944D66
            SearchHits hits = searchResponse.getHits();
            ObjectMapper mapper = new ObjectMapper();
            page.setTotalCount((int) hits.getTotalHits());
            page.setTotalPages((int) (hits.getTotalHits()%page.getPageSize() == 0 ? hits.getTotalHits()/page.getPageSize() : hits.getTotalHits()/page.getPageSize() +1));
            for (int i = 0; i < hits.getHits().length; i++) {
                Map<String, Object> temp = hits.getHits()[i].getSource();
                temp = elasticsearchHelper.removeUseless(temp);
                ElasticsearchProductListResponse elasticsearchProductListResponse = mapper.readValue(JSONObject.toJSON(temp).toString(), ElasticsearchProductListResponse.class);
                productPageListResponses.add(elasticsearchHelper.conversProductPageListResponses(productPageListRecommendRequest,elasticsearchProductListResponse));
            }
        } catch (Exception e) {
            LOGGER.info("elasticSearch查詢客戶的理財師推薦產品列表分頁異常", e);
        }
        return productPageListResponses;
    }

    @Override
    public List<ProductPageListResponse> elasticSearchQueryProductScreenPageList(ScreenProductPageListRequest screenProductPageListRequest,Page<ProductPageListResponse> page) {
        List<ProductPageListResponse> productPageListResponses = new ArrayList<ProductPageListResponse>();
        try {
            TransportClient client = elasticsearchHelper.getElasticSearchClient();
            SearchRequestBuilder searchRequestBuilder = client.prepareSearch("logstash-supermarket-online").setTypes("productFull");
            BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery()
                    .must(QueryBuilders.termQuery("orgStatus", 1))
                    .must(QueryBuilders.termQuery("status", 1))
                    .must(QueryBuilders.termQuery("auditStatus", 1))
                    .must(QueryBuilders.scriptQuery(new Script("doc['saleStartTime'].value < new Date().getTime()")))
                    .must(QueryBuilders.scriptQuery(new Script("doc['buyTotalMoney'].value > doc['buyedTotalMoney'].value")));//
            if(!screenProductPageListRequest.getIfHaveGray()){
                queryBuilder.must(QueryBuilders.termQuery("orgGrayStatus", 0));
            }
            if(StringUtils.isNotBlank(screenProductPageListRequest.getOrgNumber())){
                queryBuilder.must(QueryBuilders.termQuery("orgNumber.raw", screenProductPageListRequest.getOrgNumber()));
            }
            if(StringUtils.isNotBlank(screenProductPageListRequest.getMinDeadLine()) && StringUtils.isNotBlank(screenProductPageListRequest.getMaxDeadLine())){
                queryBuilder.must(QueryBuilders.boolQuery().minimumNumberShouldMatch(1)
                                .should(QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery("deadLineMinValue").lte(screenProductPageListRequest.getMinDeadLine())).must(QueryBuilders.rangeQuery("deadLineMaxValue").gte(screenProductPageListRequest.getMaxDeadLine())))
                                .should(QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery("deadLineMinValue").gte(screenProductPageListRequest.getMinDeadLine())).must(QueryBuilders.rangeQuery("deadLineMinValue").lte(screenProductPageListRequest.getMaxDeadLine())))
                                .should(QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery("deadLineMaxValue").gte(screenProductPageListRequest.getMinDeadLine())).must(QueryBuilders.rangeQuery("deadLineMaxValue").lte(screenProductPageListRequest.getMaxDeadLine())))
                            );
            }
            if(StringUtils.isNotBlank(screenProductPageListRequest.getMinYearProfit()) && StringUtils.isNotBlank(screenProductPageListRequest.getMaxYearProfit())){
                queryBuilder.must(QueryBuilders.boolQuery().minimumNumberShouldMatch(1)
                                .should(QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery("flowMinRate").lte(screenProductPageListRequest.getMinYearProfit())).must(QueryBuilders.rangeQuery("flowMaxRate").gte(screenProductPageListRequest.getMaxYearProfit())))
                                .should(QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery("flowMinRate").gte(screenProductPageListRequest.getMinYearProfit())).must(QueryBuilders.rangeQuery("flowMinRate").lte(screenProductPageListRequest.getMaxYearProfit())))
                                .should(QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery("flowMaxRate").gte(screenProductPageListRequest.getMinYearProfit())).must(QueryBuilders.rangeQuery("flowMaxRate").lte(screenProductPageListRequest.getMaxYearProfit())))
                            );
            }
            if(StringUtils.isNotBlank(screenProductPageListRequest.getPlatformContext())){
                List<String> orgNumberList = new ArrayList<String>();
                CimOrginfo cimOrginfo = new CimOrginfo();
                cimOrginfo.setContext(screenProductPageListRequest.getPlatformContext());
                List<CimOrginfo> orgInfoList= cimOrginfoService.selectListByCondition(cimOrginfo);
                for(CimOrginfo temp : orgInfoList){
                    orgNumberList.add(temp.getOrgNumber());
                }
                queryBuilder.must(QueryBuilders.termsQuery("orgNumber.raw", orgNumberList));
            }
            if(StringUtils.isNotBlank(screenProductPageListRequest.getSecurityLevel())){
                queryBuilder.must(QueryBuilders.scriptQuery(new Script("doc['orgGrade.raw'].value.toInteger() " + screenProductPageListRequest.getSecurityLevel())));
            }
            searchRequestBuilder = searchRequestBuilder.setQuery(queryBuilder);
            
            SortBuilder isSallingSort = new FieldSortBuilder("isSalling").order(SortOrder.DESC);
            SortBuilder commonSort = null;
            SortBuilder timeSort = null;
            Integer cnSort = screenProductPageListRequest.getSort();
            Integer cnOrder = screenProductPageListRequest.getOrder();
            if(cnSort != null && cnOrder != null){
                if(cnSort == 1){
                    commonSort = new FieldSortBuilder("showIndex");
                }else if(cnSort == 2 && cnOrder == 0){
                    commonSort = new FieldSortBuilder("flowMinRate");
                }else if(cnSort == 2 && cnOrder == 1){
                    commonSort = new FieldSortBuilder("flowMaxRate");
                }else if(cnSort == 3 && cnOrder == 0){
                    commonSort = new FieldSortBuilder("deadLineMinValue");
                }else if(cnSort == 3 && cnOrder == 1){
                    commonSort = new FieldSortBuilder("deadLineMaxValue");
                }else if(cnSort == 4){
                    commonSort = new FieldSortBuilder("feeRatio");
                }
                if(cnOrder == 0){
                    commonSort.order(SortOrder.ASC);
                }else if(cnOrder == 1){
                    commonSort.order(SortOrder.DESC);
                }
                timeSort = new FieldSortBuilder("createTime").order(SortOrder.DESC);
            }
            
            searchRequestBuilder.addSort(isSallingSort);
            if(commonSort != null){
                searchRequestBuilder.addSort(commonSort);
            }
            if(timeSort != null){
                searchRequestBuilder.addSort(timeSort);
            }
            
            SearchResponse searchResponse = searchRequestBuilder.setFrom((page.getPageNo()-1)*page.getPageSize()).setSize(page.getPageSize()).get();//178271C881504FBCBF1DF80DE9944D66
            SearchHits hits = searchResponse.getHits();
            
            ObjectMapper mapper = new ObjectMapper();
            page.setTotalCount((int) hits.getTotalHits());
            page.setTotalPages((int) (hits.getTotalHits()%page.getPageSize() == 0 ? hits.getTotalHits()/page.getPageSize() : hits.getTotalHits()/page.getPageSize() +1));
            for (int i = 0; i < hits.getHits().length; i++) {
                Map<String, Object> temp = hits.getHits()[i].getSource();
                temp = elasticsearchHelper.removeUseless(temp);
                ElasticsearchProductListResponse elasticsearchProductListResponse = mapper.readValue(JSONObject.toJSON(temp).toString(), ElasticsearchProductListResponse.class);
                productPageListResponses.add(elasticsearchHelper.conversProductPageListResponses(screenProductPageListRequest,elasticsearchProductListResponse));
            }
        } catch (Exception e) {
            LOGGER.info("elasticSearch查詢產品列表異常", e);
        }
        return productPageListResponses;
    }
    
}

產品列表的列表返回對象為:

package com.linkwee.api.response.cim;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import com.linkwee.web.model.ActivityList;
import com.linkwee.web.model.CimOrgMemberInfo;
import com.linkwee.web.model.CimProduct;

public class ElasticsearchProductListResponse extends CimProduct {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    
    /**
     *主鍵,自增長
     */
    private Integer orgId;
    
    /**
     *機構編碼-不重覆欄位
     */
    private String orgNumber;
    
    /**
     *機構名稱
     */
    private String orgName;
    
    /**
     *機構後臺賬戶
     */
    private String orgAccount;
    
    /**
     *機構後臺密碼
     */
    private String orgPassw

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 介紹幾個js DOM的常用方法 獲取元素節點 getElementById getElementsByTagName getElementsByClassName 先寫一個簡單的網頁做測試: 1. getElementById 1.先定義變數 var contentId = document.get ...
  • RegExp對象是原生JavaScript中表示正則表達式的對象。 創建對象的方法為:var RegExp = new RegExp(pattern, attributes); 參數pattern指定正則表達式的規則或者表示正則表達式模式的字元串;參數attributes為可選參數,表示匹配模式的修 ...
  • 我相信,有不少的朋友對webpack都有或多或少的瞭解。網上也有了各種各樣的文章,文章內作者也寫出了不少自己對於webpack這個工具的理解。在我剛剛接觸webpack的時候,老實說,網上大部分的文章我是看不懂的。。webpack裡面有很多名詞,是沒有接觸和理解過模塊化的同學都難以理解的。我感覺,學 ...
  • 學習js的過程中有幾個有用的函數。 ...
  • var myArray=new Array();for(var i=0;i<3;i++){ myArray[i]=new Array(); for(var j=0;j<6;j++){ myArray[i][j]=i*j; document.write(myArray[i][j]+"\n"); }} ...
  • html上現在有比較好用的表格控制項是datatable,但是編輯、按鈕等部分是收費的,只有基礎功能免費。而且尺寸發生變化時需要手工刷新等繁瑣操作較多。所以我開發一個免費的供大家使用。 本項目已用於“虛空伺服器開發套件”。目前主要支持微軟Edge瀏覽器,Chrome瀏覽器,其它未測。 tbl.js完全 ...
  • 安裝SVN 查看是否安裝成功: 登陸SVN 登陸的svn是公司的伺服器 接著輸入用戶名與密碼即可。 這裡的co是登陸後檢出最新版本。 更新update 這時候就能在我們的目錄中發現我們的文件了 然後進入進行更新即可。 問題 有時候更新報錯: 如果你認為安裝並登陸且檢出文件後就可以直接更新的話,那就不 ...
  • 資料庫 字元集 UTF-8 GBK 創建表結構 與Excel類似 儘量都是小寫 SQLSERVER首字母大寫 首碼後加下劃線 數據類型 varchar bit 常用來表示性別 int varchar datetime PHP特點,存時間戳的時候用varchar text 主鍵 自增長列 外鍵 外鍵關 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...