ES中TransportClient 5.6版本之前JAVA-API使用方法

1衡怀、配置

    /**
     * 連接池
     */
    private static String POOL_SIZE = "5";
    TransportClient client;
    //es 客戶端名稱 例如my-application
    private static final String ES_CLUSTER_NAME = "es.cluster.name";
    //服務(wù)地址 
    private static final String ES_HOST_NAME = "es.host.name";

    //端口號 例如 默認(rèn)是 9300
    private static final String ES_PORT = "es.port";
    //es搜索歷史索引名稱
    private static final String SEARCH_HISTORY = "myFirstIndex";

2澄惊、初始化

  public void init()   {
        // 配置信息
                Settings esSetting = Settings.builder()
                        .put("cluster.name", AppContext.current().getConfig().getProperty(ES_CLUSTER_NAME))
                        .put("thread_pool.search.size", Integer.parseInt(POOL_SIZE))//增加線程池個數(shù)撒穷,暫時設(shè)為5
                        .build();
                //配置信息Settings自定義
                client = new PreBuiltTransportClient(esSetting);
        TransportAddress transportAddress = null;

        try {
            transportAddress = new TransportAddress
                    (InetAddress.getByName(AppContext.current().getConfig().getProperty(ES_HOST_NAME))
                            , Integer.valueOf(AppContext.current().getConfig().getProperty(ES_PORT)));
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
        client.addTransportAddresses(transportAddress);

    }

3捕儒、使用方法 - 增刪改查(封裝好的)

新增 prepareIndex
/**
*根據(jù)id隐圾,新增實體數(shù)據(jù)望几,如果id存在會默認(rèn)更新實體數(shù)據(jù)绩脆。參數(shù) jsonObject 是json格式
**/
public  IndexResponse getDocHistoryIndex(JSONObject jsonObject, String id) {
        IndexResponse    response = getClient().prepareIndex(SEARCH_HISTORY, "_doc", id)
                    .setSource(jsonObject.toString(), XContentType.JSON).get();
        return response;
    }
更新 prepareUpdate
/**
     *根據(jù)id,和實體數(shù)據(jù)更新
     * @param jsonObject
     * @param id
     * @return
     */
    public  UpdateResponse updateDocHistoryIndex(JSONObject jsonObject, String id) {

         UpdateResponse   updateResponse = getClient().prepareUpdate(SEARCH_HISTORY, "_doc", id)
                    .setDoc(jsonObject.toString(), XContentType.JSON).execute().actionGet();
        return updateResponse;
    }
查詢 獲取 SearchRequestBuilder對象
/**
*獲取 SearchRequestBuilder對象
**/
public  SearchRequestBuilder prepareHistorySearch() {
         SearchRequestBuilder   searchRequestBuilder = getClient().prepareSearch(SEARCH_HISTORY).
                    setSearchType(SearchType.DFS_QUERY_THEN_FETCH);

        return searchRequestBuilder;
    }
刪除 prepareDelete
/**
*根據(jù)id刪除
**/
public  DeleteResponse prepareHistoryDelete(String documentId) {
         DeleteResponse   deleteResponse = getClient().prepareDelete(SEARCH_HISTORY, "_doc", documentId).get();

        return deleteResponse;
    }
根據(jù)id查詢 prepareGet
public  GetResponse getHistoryById(String id) {
        GetRequestBuilder    getRequestBuilder = getClient().prepareGet(SEARCH_HISTORY, "_doc", id);
        GetResponse response = getRequestBuilder.get();
        return response;
    }

批量更新某個字段 UpdateByQueryRequestBuilder(查詢并更新)
/**
     *先查詢結(jié)果集--然后 批量更新某個字段
     */
    public  UpdateByQueryRequestBuilder updateByQueryRequestBuilder() {
        UpdateByQueryRequestBuilder updateByQuery = new UpdateByQueryRequestBuilder(client, UpdateByQueryAction.INSTANCE)
                .source(SEARCH_HISTORY);
        return updateByQuery;

    }

//例子:
/**
     * 批量更新某個字段值 業(yè)務(wù)是:根據(jù)條件查出結(jié)果然后.script腳本對要更新的字段操作,如把結(jié)果集字段isDelete 狀態(tài)改成1 批量邏輯刪除操作橄妆。
     */
    public Result clearAllHistory() {
        Result result = new Result();
        try {
            UpdateByQueryRequestBuilder updateByQuery = clientUtil.updateByQueryRequestBuilder()
                    //查詢要修改的結(jié)果集
                    .filter(QueryBuilders.termQuery("isDelete", 0))
                    //修改操作
                    .script(new Script("ctx._source['isDelete'] = '1'"));
            //響應(yīng)結(jié)果集
            BulkByScrollResponse response = updateByQuery.get();
            long updated = response.getUpdated();
            result.setMessage("刪除" + updated + "個");
        } catch (Exception e) {
            e.printStackTrace();
            result.setSuccess(false);
            result.setMessage(TipMessage.DELETE_FAIL);

        }
        return result;

    }

高亮字段處理 HighlightField
/**
     * 高亮結(jié)果集 特殊處理
     *
     * @param esDocForm 查出來的對象 
     * @SearchHit 
     * @param highlightField 要高亮的字段
     *@content 要處理的字段內(nèi)容
例如:查出來一篇文檔衙伶,我只要匹配到的關(guān)鍵字那一小段內(nèi)容,供前端顯示使用(百度文檔形式)
     */
    private void setSearchResponse(EsDocForm esDocForm, SearchHit next, String highlightField, String content) {

        StringBuffer stringBuffer = new StringBuffer();
        HighlightField highlightDocNameField = next.getHighlightFields().get(highlightField);
        Map<String, HighlightField> highlightFields = next.getHighlightFields();
        HighlightField highlightContent = highlightFields.get(content);
        //處理文檔內(nèi)容
        if (highlightContent != null) {
            Text[] contentText = highlightContent.getFragments();
            //出來文檔內(nèi)容里關(guān)鍵字提取
            if (contentText != null) {
                //只取一段
                esDocForm.setContent(contentText[0].string() + "...");
            }
        }
        if (highlightDocNameField != null) {
            Text[] docNameText = highlightDocNameField.getFragments();
            if (docNameText != null) {
                for (Text str : docNameText) {
                    stringBuffer.append(str.string());
                }
                esDocForm.setDocName(stringBuffer.toString());
            }
        }


    }
統(tǒng)計AggregationBuilder
 /**
     * 統(tǒng)計查詢 根據(jù)時間段 統(tǒng)計不同類型的總數(shù) 
     *例:要查詢出7天內(nèi)害碾,不同文件類型文件有多少矢劲,如pdf、doc類型有多少個
     */
//部分代碼
boolQueryBuilder 是你的查詢條件 searchFiled 是你的分類字段 
AggregationBuilder oneAgg
                = AggregationBuilders.terms(searchFiled).field(searchFiled);
        SearchRequestBuilder searchRequestBuilder = clientUtil.prepareDocSearch().setQuery(boolQueryBuilder).addAggregation(oneAgg);
        SearchResponse searchResponse = searchRequestBuilder.get();
關(guān)閉資源
 /**
     * 關(guān)閉
     */
    public  void close() {
        if (client != null) {
            client.close();
        }
    }

5.6版本之后可使用高級客戶端Java High Level REST Client初始化需要Java 1.8慌随,并依賴于Elasticsearch核心項目芬沉,客戶端版本與客戶端開發(fā)的Elasticsearch版本相同,它接受與TransportClient相同的請求參數(shù)阁猜,并返回相同的響應(yīng)對象

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末丸逸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子剃袍,更是在濱河造成了極大的恐慌黄刚,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件民效,死亡現(xiàn)場離奇詭異憔维,居然都是意外死亡涛救,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門业扒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來检吆,“玉大人,你說我怎么就攤上這事程储〔渑妫” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵章鲤,是天一觀的道長摊灭。 經(jīng)常有香客問我,道長咏窿,這世上最難降的妖魔是什么斟或? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮集嵌,結(jié)果婚禮上萝挤,老公的妹妹穿的比我還像新娘。我一直安慰自己根欧,他們只是感情好怜珍,可當(dāng)我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著凤粗,像睡著了一般酥泛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嫌拣,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天柔袁,我揣著相機與錄音,去河邊找鬼异逐。 笑死捶索,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的灰瞻。 我是一名探鬼主播腥例,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼酝润!你這毒婦竟也來了燎竖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤要销,失蹤者是張志新(化名)和其女友劉穎构回,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡捐凭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年拨扶,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茁肠。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖缩举,靈堂內(nèi)的尸體忽然破棺而出垦梆,到底是詐尸還是另有隱情,我是刑警寧澤仅孩,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布托猩,位于F島的核電站,受9級特大地震影響辽慕,放射性物質(zhì)發(fā)生泄漏京腥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一溅蛉、第九天 我趴在偏房一處隱蔽的房頂上張望公浪。 院中可真熱鬧,春花似錦船侧、人聲如沸欠气。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽预柒。三九已至,卻和暖如春袁梗,著一層夾襖步出監(jiān)牢的瞬間宜鸯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工遮怜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留淋袖,地道東北人。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓奈泪,卻偏偏與公主長得像适贸,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子涝桅,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容