BaseService.java 2.52 KB
package com.yoho.search.common;

import com.yoho.search.base.utils.ConvertUtils;
import org.apache.commons.lang.StringUtils;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;

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

/**
 * Created by wangnan on 2016/12/16.
 */
public class BaseService {

    /**
     * 增加一个termsQuery
     */
    protected BoolQueryBuilder boolQueryTermsQuery(Map<String, String> paramMap, BoolQueryBuilder boolFilter, String fieldName) {
        if (paramMap.containsKey(fieldName) && StringUtils.isNotBlank(paramMap.get(fieldName))) {
            List<Integer> values = ConvertUtils.stringToIntList(paramMap.get(fieldName), ",");
            if (values == null || values.isEmpty()) {
                return boolFilter;
            }
            boolFilter.must(QueryBuilders.termsQuery(fieldName, values));
        }
        return boolFilter;
    }

    /**
     * 增加一个termQuery
     */
    protected BoolQueryBuilder boolQueryTermQuery(Map<String, String> paramMap, BoolQueryBuilder boolFilter, String fieldName) {
        if (paramMap.containsKey(fieldName) && StringUtils.isNotBlank(paramMap.get(fieldName))) {
            boolFilter.must(QueryBuilders.termQuery(fieldName, paramMap.get(fieldName)));
        }
        return boolFilter;
    }

    /**
     * 通用的过滤请求
     */
    protected BoolQueryBuilder generalHandler(Map<String, String> paramMap, BoolQueryBuilder boolFilter) {
        for (String key : paramMap.keySet()) {
            if (key.startsWith("not_")) {
                String[] values = paramMap.get(key).split(",");
                boolFilter.mustNot(QueryBuilders.termsQuery(key.substring(4, key.length()), values));
            }
            if (key.startsWith("filter_")) {
                String field = key.substring(7, key.length());
                boolFilter.must(QueryBuilders.termsQuery(field, paramMap.get(key).split(",")));
            }
            if (key.startsWith("missing_")) {
                String field = key.substring(8, key.length());
                boolFilter.mustNot(QueryBuilders.existsQuery(field));
            }
        }
        if (boolFilter.hasClauses()) {
            return boolFilter;
        } else {
            return null;
        }
    }

    protected int getPage(Map<String, String> paramMap) {
        int page = StringUtils.isBlank(paramMap.get("page")) ? 1 : Integer.parseInt(paramMap.get("page"));
        return page;
    }
}