Elasticserch3-Java入门

package com.cfl.elasticsearch.utils;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;

public class ElasticsearchUtils {

private Client client;

public static class ElasticsearchUtilsHolder {
    public static ElasticsearchUtils instance = new ElasticsearchUtils();
}
private ElasticsearchUtils() {
    // 初始化
    Settings settings = Settings.settingsBuilder().put("cluster.name","elast").build();
    try {
        client = TransportClient.builder().settings(settings).build()
        .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
    } catch (UnknownHostException e) {
        e.printStackTrace();
    }
};
public static ElasticsearchUtils share() {
    ElasticsearchUtils elastsearchUtils = ElasticsearchUtilsHolder.instance;
    return elastsearchUtils;
}

public static void main(String[] args) throws Exception {
    
}

/**
 * 插入索引
 * @param index 索引库(数据库)
 * @param type 类型(表)
 * @param documentId 文本id(行id)
 * @param map (数据)
 */
public void index(String index, String type, String documentId, Map map) {
    // 插入索引
    client.prepareIndex(index, type, documentId).setSource(map).execute().actionGet();
}

/**
 * 获取索引
 * @param index 索引库
 * @param type 类型(表)
 * @param documentId 文本id(行id)
 * @return
 */
public Map getById(String index, String type, String documentId)
{
    Map map = null;
    GetResponse getResponse = client.prepareGet(index, type, documentId).get();
    if(getResponse != null)
    {
        map = getResponse.getSource();
    }
    return map;
}

/**
 * 根据名称分页获取数据
 * @param index
 * @param type
 * @param name
 * @return
 */
public List> getByNamePage(String index, String type, String name, Integer sex, Integer minAge, Integer maxAge, int page, int pageSize)
{
    // 查询条件
    BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
    if(StringUtils.isNotEmpty(name))
    {
        boolQueryBuilder.must(QueryBuilders.matchQuery("name", name));      // 分词
    }
    if(sex != null)
    {
        boolQueryBuilder.must(QueryBuilders.termQuery("sex", sex));         // 不分词
    }
    if(pageSize == 0) pageSize = 20;
    
    List> list = new ArrayList>();
    SearchRequestBuilder search = client.prepareSearch(index);  // 索引库
    search.setTypes(type);                                      // 表
    search.setSearchType(SearchType.QUERY_THEN_FETCH);          // 查询方式
    search.setQuery(boolQueryBuilder);                          // 查询条件
    if(minAge != null && maxAge != null)
    {
        search.setPostFilter(QueryBuilders.rangeQuery("age").from(minAge).to(maxAge));  // 过滤
    }
    search.setFrom((page-1)*pageSize).setSize(pageSize).setExplain(true);               // 分页
    SearchResponse response = search.execute().actionGet();     // 查询结构
    SearchHit[] searchHits = response.getHits().getHits();
    for(int i = 0; i < searchHits.length; i++)
    {
        SearchHit searchHit = searchHits[i];
        list.add(searchHit.getSource());
    }
    return list;
}


/**
 * 修改索引
 * @param index 索引库(数据库)
 * @param type 类型(表)
 * @param documentId 文本id(行id)
 * @param map 数据
 */
public void updateById(String index, String type, String documentId, Map map)
{
    UpdateRequest updateResponse = new UpdateRequest();
    updateResponse.index(index);
    updateResponse.type(type);
    updateResponse.id(documentId);
    updateResponse.doc(map);
    client.update(updateResponse);
}

/**
 * 删除索引
 * @param index 索引库
 * @param type 类型(表)
 * @param documentId 文本id(行id)
 */
public void deleteById(String index, String type, String documentId)
{
    client.prepareDelete(index, type, documentId).get();
}

}

你可能感兴趣的:(Elasticserch3-Java入门)