EsSearchBiz.java 2.88 KB
package com.cjs.cms.biz.elasticsearch;

import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.sort.SortOrder;

import com.cjs.cms.util.elasticsearch.EsClient;

/**
 * 搜索ElasticSearch
 * 
 * @author tongyufu
 *
 */
public class EsSearchBiz {

    public static void main(String[] args) {
        EsSearchBiz search = new EsSearchBiz();
        search.matchQuery();
    }

    public void matchQuery() {
        TransportClient client = EsClient.getClient();
        SearchRequestBuilder request = client.prepareSearch(EsClient.INDEX).setTypes(EsClient.TYPE)
            .setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
        request.setQuery(QueryBuilders.matchQuery("otcName", "孙中山"));
        request.setPostFilter(QueryBuilders.rangeQuery("businessAmount").from(2).to(10)); //过滤器
        request.addSort("tradeAt", SortOrder.DESC); //排序
        request.setFrom(0).setSize(5); //分页
        request.setExplain(false); //获取说明信息
        //高亮关键字
        HighlightBuilder highlightBuilder = new HighlightBuilder();
        highlightBuilder.preTags("<span class='red-font'>"); //设置前缀
        highlightBuilder.postTags("</span>"); //设置后缀
        highlightBuilder.field("otcName"); //设置高亮字段
        request.highlighter(highlightBuilder);

        SearchResponse response = request.get();
        System.out.println("=====" + response);
        System.out.println("=====" + response.getHits().getTotalHits());
        for (SearchHit searchHit : response.getHits().getHits()) {
            System.out.println(searchHit.sourceAsString());
        }
        client.close();
    }

    public void termSearch() {
        TransportClient client = EsClient.getClient();
        SearchRequestBuilder request = client.prepareSearch(EsClient.INDEX).setTypes(EsClient.TYPE)
            .setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
        request.setQuery(QueryBuilders.termQuery("otcCode", "630026"));
        request.setPostFilter(QueryBuilders.rangeQuery("businessAmount").from(2).to(10)); //过滤器
        request.addSort("tradeAt", SortOrder.DESC); //排序
        request.setFrom(0).setSize(5); //分页
        request.setExplain(false); //获取说明信息

        SearchResponse response = request.get();
        System.out.println("=====" + response);
        System.out.println("=====" + response.getHits().getTotalHits());
        for (SearchHit searchHit : response.getHits().getHits()) {
            System.out.println(searchHit.sourceAsString());
        }
        client.close();
    }

}