使用JestClient操作ElasticSearch

来源:互联网 发布:网络的危害英语作文 编辑:程序博客网 时间:2024/06/06 06:51

可参考:
https://www.blog-china.cn/template/documentHtml/1484101683485.html

https://github.com/searchbox-io/Jest/blob/master/jest/src/test/java/io/searchbox/core/SearchScrollIntegrationTest.java

使用JestClient操作ElasticSearch,具体代码如下:

InitElasticSearchConfig.java

package com.mdl.monitor.init;import com.google.gson.GsonBuilder;import io.searchbox.client.JestClient;import io.searchbox.client.JestClientFactory;import io.searchbox.client.config.HttpClientConfig;/** * 初始化es */public class InitElasticSearchConfig {    private JestClient client ;    public JestClient getClient() {        return client;    }    public InitElasticSearchConfig(String esUrl){        client = getClientConfig(esUrl) ;    }    public JestClient getClientConfig(String esUrl){        JestClientFactory factory = new JestClientFactory();        factory.setHttpClientConfig(new HttpClientConfig                .Builder(esUrl)                .gson(new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss").create())                .multiThreaded(true)                .readTimeout(10000)                .build());        JestClient client = factory.getObject();        return client ;    }}

ElasticSearchDao.java

package com.mdl.monitor.repositorys.elasticsearch;import java.util.List;import com.google.gson.JsonObject;import io.searchbox.client.JestResult;import io.searchbox.core.SearchResult.Hit;import io.searchbox.core.SuggestResult;/** * ES操作 抽象方法 基本包含所有基本操作 */public interface ElasticSearchDao {    /**     * 删除索引     * @param type :当前删除document名称     * @return     */    public JestResult deleteIndex(String type) ;    //清除缓存    public JestResult clearCache() ;    /**     * 关闭索引     * @param type :文档表示的对象类别     * @return     */    public JestResult closeIndex(String type) ;    //优化索引    public JestResult optimizeIndex() ;    //刷新索引    public JestResult flushIndex();    //判断索引是否存在    public JestResult indicesExists();    //查看节点信息    public JestResult nodesInfo();    //查看集群健康信息    public JestResult health();    //节点状态    public JestResult nodesStats();    /**     * 更新Document     * @param index :文档在哪存放     * @param type : 文档表示的对象类别     * @param id :文档唯一标识     */    public JestResult updateDocument(String script , String index,String type,String id);    /**     * 删除Document     * @param index :文档在哪存放     * @param type : 文档表示的对象类别     * @param id :文档唯一标识     * @return     */    public JestResult deleteDocument(String index,String type,String id) ;    /**     * 获取Document     * @param o :返回对象     * @param index :文档在哪存放     * @param type : 文档表示的对象类别     * @param id :文档唯一标识     * @return     */    public <T> JestResult getDocument(T o , String index , String type , String id) ;    //Suggestion    public List<SuggestResult.Suggestion> suggest() ;    /**     * 查询全部     * @param index :文档在哪存放     * @return     */    public <T> List<Hit<T,Void>> searchAll(String index , T o);    /**     * 搜索     * @param keyWord :搜索关键字     * @return      */    public <T> List<Hit<T,Void>> createSearch(String keyWord , String type , T o , String... fields) ;    //bulkIndex操作    public <T> void bulkIndex(String index , String type , T o) ;    /**     * 创建索引     * @param o :返回对象     * @param index :文档在哪存放     * @param type : 文档表示的对象类别     * @return     */    public <T> JestResult createIndex(T o , String index , String type);    /**     * 搜索事件流图表数据     * @param param     * @return     */    public JsonObject searchEvent(String param); }

ElasticSearchDaoImpl.java

package com.mdl.monitor.repositorys.elasticsearch.impl;import java.io.IOException;import java.lang.reflect.Method;import java.util.Arrays;import java.util.List;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.elasticsearch.index.query.QueryBuilders;import org.elasticsearch.search.builder.SearchSourceBuilder;import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.mdl.monitor.init.InitElasticSearchConfig;import com.mdl.monitor.repositorys.elasticsearch.ElasticSearchDao;import com.google.gson.JsonObject;import com.google.gson.JsonParser;import io.searchbox.client.JestResult;import io.searchbox.cluster.Health;import io.searchbox.cluster.NodesInfo;import io.searchbox.cluster.NodesStats;import io.searchbox.core.Bulk;import io.searchbox.core.Delete;import io.searchbox.core.Get;import io.searchbox.core.Index;import io.searchbox.core.Search;import io.searchbox.core.SearchResult;import io.searchbox.core.SearchResult.Hit;import io.searchbox.core.Suggest;import io.searchbox.core.SuggestResult;import io.searchbox.core.SuggestResult.Suggestion;import io.searchbox.core.Update;import io.searchbox.indices.ClearCache;import io.searchbox.indices.CloseIndex;import io.searchbox.indices.DeleteIndex;import io.searchbox.indices.Flush;import io.searchbox.indices.IndicesExists;import io.searchbox.indices.Optimize;/** * es操作实现类 */@Servicepublic class ElasticSearchDaoImpl implements ElasticSearchDao{    static protected final Log log = LogFactory.getLog(ElasticSearchDaoImpl.class.getName());    @Autowired    private InitElasticSearchConfig esConfig ;    @Override    public JestResult deleteIndex(String type) {        DeleteIndex deleteIndex = new DeleteIndex.Builder(type).build();        JestResult result = null ;        try {            result = esConfig.getClient().execute(deleteIndex);            log.info("deleteIndex == " + result.getJsonString());        } catch (IOException e) {            e.printStackTrace();        }        return result ;    }    @Override    public JestResult clearCache() {        ClearCache closeIndex = new ClearCache.Builder().build();        JestResult result = null ;        try {            result = esConfig.getClient().execute(closeIndex);            log.info("clearCache == " + result.getJsonString());        } catch (IOException e) {            e.printStackTrace();        }        return result ;    }    @Override    public JestResult closeIndex(String type) {        CloseIndex closeIndex = new CloseIndex.Builder(type).build();         JestResult result = null ;        try {            result = esConfig.getClient().execute(closeIndex);            log.info("closeIndex == " + result.getJsonString());        } catch (IOException e) {            e.printStackTrace();        }        return result ;    }    @Override    public JestResult optimizeIndex() {        Optimize optimize = new Optimize.Builder().build();         JestResult result = null ;        try {            result = esConfig.getClient().execute(optimize);            log.info("optimizeIndex == " + result.getJsonString());        } catch (IOException e) {            e.printStackTrace();        }        return result ;    }    @Override    public JestResult flushIndex() {        Flush flush = new Flush.Builder().build();         JestResult result = null ;        try {            result = esConfig.getClient().execute(flush);            log.info("flushIndex == " + result.getJsonString());        } catch (IOException e) {            e.printStackTrace();        }        return result ;    }    @Override    public JestResult indicesExists() {        IndicesExists indicesExists = new IndicesExists.Builder("article").build();        JestResult result = null ;        try {            result = esConfig.getClient().execute(indicesExists);            log.info("indicesExists == " + result.getJsonString());        } catch (IOException e) {            e.printStackTrace();        }        return result ;    }    @Override    public JestResult nodesInfo() {        NodesInfo nodesInfo = new NodesInfo.Builder().build();        JestResult result = null ;        try {            result = esConfig.getClient().execute(nodesInfo);            log.info("nodesInfo == " + result.getJsonString());        } catch (IOException e) {            e.printStackTrace();        }        return result ;    }    @Override    public JestResult health() {        Health health = new Health.Builder().build();        JestResult result = null ;        try {            result = esConfig.getClient().execute(health);            log.info("health == " + result.getJsonString());        } catch (IOException e) {            e.printStackTrace();        }        return result ;    }    @Override    public JestResult nodesStats() {        NodesStats nodesStats = new NodesStats.Builder().build();        JestResult result = null ;        try {            result = esConfig.getClient().execute(nodesStats);            log.info("nodesStats == " + result.getJsonString());        } catch (IOException e) {            e.printStackTrace();        }        return result ;    }    @Override    public JestResult updateDocument(String script , String index, String type, String id) {        /*String script = "{" +                "    \"doc\" : {" +                "        \"title\" : \""+article.getTitle()+"\"," +                "        \"content\" : \""+article.getContent()+"\"," +                "        \"author\" : \""+article.getAuthor()+"\"," +                "        \"source\" : \""+article.getSource()+"\"," +                "        \"url\" : \""+article.getUrl()+"\"," +                "        \"pubdate\" : \""+new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").format(article.getPubdate())+"\"" +                "    }" +                "}";*/        Update update = new Update.Builder(script).index(index).type(type).id(id).build();        JestResult result = null ;        try {            result = esConfig.getClient().execute(update);            log.info("updateDocument == " + result.getJsonString());        } catch (IOException e) {            e.printStackTrace();        }        return result ;    }    @Override    public JestResult deleteDocument(String index, String type, String id) {        Delete delete = new Delete.Builder(id).index(index).type(type).build();        JestResult result = null ;        try {            result = esConfig.getClient().execute(delete);            log.info("deleteDocument == " + result.getJsonString());        } catch (IOException e) {            e.printStackTrace();        }        return result;    }    @Override    public <T> JestResult getDocument(T object , String index, String type, String id) {        Get get = new Get.Builder(index, id).type(type).build();        JestResult result = null ;        try {            result = esConfig.getClient().execute(get);                 T o = (T) result.getSourceAsObject(object.getClass());            for (Method method : o.getClass().getMethods()) {                log.info("getDocument == " + method.getName());            }        } catch (IOException e) {            e.printStackTrace();        }        return result;    }    @Override    public List<Suggestion> suggest() {        String suggestionName = "my-suggestion";        Suggest suggest = new Suggest.Builder("{" +                "  \"" + suggestionName + "\" : {" +                "    \"text\" : \"the amsterdma meetpu\"," +                "    \"term\" : {" +                "      \"field\" : \"body\"" +                "    }" +                "  }" +                "}").build();        SuggestResult suggestResult = null ;        List<SuggestResult.Suggestion> suggestionList = null ;        try {            suggestResult = esConfig.getClient().execute(suggest);            log.info("suggestResult.isSucceeded() == " + suggestResult.isSucceeded());            suggestionList = suggestResult.getSuggestions(suggestionName);            log.info("suggestionList.size() == " + suggestionList.size());            for(SuggestResult.Suggestion suggestion:suggestionList){                System.out.println(suggestion.text);            }        } catch (IOException e) {            e.printStackTrace();        }        return suggestionList ;    }    @Override    public <T> List<Hit<T, Void>> searchAll(String index , T o) {        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();        searchSourceBuilder.query(QueryBuilders.matchAllQuery());        Search search = new Search.Builder(searchSourceBuilder.toString())                .addIndex(index)                .build();        SearchResult result = null ;        List<?> hits = null ;        try {            result = esConfig.getClient().execute(search);            System.out.println("本次查询共查到:"+result.getTotal()+"个关键字!");            log.info("本次查询共查到:"+result.getTotal()+"个关键字!");            hits = result.getHits(o.getClass());        } catch (IOException e) {            e.printStackTrace();        }        return (List<Hit<T, Void>>) hits ;    }    @Override    public <T> List<Hit<T, Void>> createSearch(String keyWord , String type , T o , String... fields) {        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();        searchSourceBuilder.query(QueryBuilders.queryStringQuery(keyWord));        HighlightBuilder highlightBuilder = new HighlightBuilder();        for(String field : fields){            highlightBuilder.field(field);//高亮field        }        highlightBuilder.preTags("<em>").postTags("</em>");//高亮标签        highlightBuilder.fragmentSize(200);//高亮内容长度        searchSourceBuilder.highlighter(highlightBuilder);        Search search = new Search.Builder(searchSourceBuilder.toString()).addIndex(type).build();        SearchResult result = null ;        List<?> hits = null ;        try {            result = esConfig.getClient().execute(search);            System.out.println("本次查询共查到:"+result.getTotal()+"个结果!");            hits = result.getHits(o.getClass());        } catch (IOException e) {            e.printStackTrace();        }        return (List<Hit<T, Void>>) hits ;    }    @Override    public <T> void bulkIndex(String index, String type , T o) {        Bulk bulk = new Bulk.Builder()                .defaultIndex(index)                .defaultType(type)                .addAction(Arrays.asList(                        new Index.Builder(o).build()                )).build();         try {            esConfig.getClient().execute(bulk);        } catch (IOException e) {            e.printStackTrace();        }    }    @Override    public <T> JestResult createIndex(T o, String index, String type) {        Index index1 = new Index.Builder(o).index(index).type(type).build();        JestResult jestResult = null ;        try {            jestResult = esConfig.getClient().execute(index1);        } catch (IOException e) {            e.printStackTrace();        }        return jestResult;    }    @Override    public JsonObject searchEvent(String param) {        JsonObject returnData = new JsonParser().parse(param).getAsJsonObject();        Search search = new Search.Builder(returnData.toString()).addType("event").addIndex("pi").build();//      Gson gs = new Gson();//      System.out.println("输入参数为:" + "\n" + gs.toJson(search));        SearchResult result = null ;        try {            result = esConfig.getClient().execute(search);//          System.out.println("\n" + gs.toJson(result.getJsonObject()) + "\n" );//          System.out.println("本次查询共查到:" + "\n" +result.getTotal()+"个结果!");        } catch (IOException e) {            e.printStackTrace();        }        return result.getJsonObject();    }}

project_servlet.xml

<!-- es连接配置 -->    <bean id="esConfig" class="com.mdl.monitor.init.InitElasticSearchConfig" >        <constructor-arg  index="0" value="${elasticUrl}"/>    </bean>

scroll分页

@Override    public JsonObject searchEventHistogramByScroll(String scrollId) {        SearchScroll scroll = new SearchScroll.Builder(scrollId, "1m").build();        JestResult result = null ;        try {            result = esConfig.getClient().execute(scroll);        } catch (IOException e) {            e.printStackTrace();        }        return result.getJsonObject();    }    @Override    public JsonObject searchInitEventHistogram(String param) {        JsonObject returnData = new JsonParser().parse(param).getAsJsonObject();        Search search = new Search.Builder(returnData.toString())                    .addIndex("pi")                    .addType("event")                    .setParameter(Parameters.SCROLL, "1m")                    .build();        JestResult result = null;        try {            result = esConfig.getClient().execute(search);        } catch (IOException e) {            e.printStackTrace();        }        return result.getJsonObject();    }