Elasticsearch 教程-精確查詢(1)-數(shù)據(jù)準備

本篇在Elasticsearch中創(chuàng)建基礎數(shù)據(jù)省艳,為*精確查詢*系列提供數(shù)據(jù)初始化赠橙。

1. 創(chuàng)建索引及類型

  • 索引名:order
  • 類型名:order
  • 創(chuàng)建腳本:
PUT /order/order/_mapping
{
    "properties": {
        "dateId": {#日期
            "type": "keyword"
        }
        ,"retailerCode": {#客戶代碼
            "type": "keyword"
        }
        ,"orderCode": {#訂單號
            "type": "keyword"
        }
        ,"barCode": {#規(guī)格代碼
            "type": "keyword"
        }
        ,"saleNum": {#銷量
            "type": "double"
        }
        ,"saleMoney": {#銷售額
            "type": "double"
        }
        ,"needNum": {
            "type": "double"
        }
        ,"updateTime": {
            "type": "date"
        }
        ,"cityCode": {#地市代碼
            "type": "keyword"
        }
        ,"levelCode": {#客戶級別
            "type": "integer"
        }
    }
    
}
  • ES 5.*之后度硝,把string字段設置為了過時字段沐兵,引入text,keyword字段,這兩個字段都可以存儲字符串使用
  • keyword:存儲數(shù)據(jù)時候涯贞,不會分詞建立索引,適合精確匹配
  • text:存儲數(shù)據(jù)時候悉抵,會自動分詞肩狂,并生成索引,適合全文檢索

2. 插入數(shù)據(jù)

  • 通過程序模擬數(shù)據(jù)導入姥饰,先導入相關的包:Elasticsearch api包傻谁,包括json序列表包

    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-high-level-client</artifactId>
        <version>6.1.1</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.45</version>
    </dependency>
  • 通過RestHighLevelClient模擬數(shù)據(jù)并插入,代碼如下:
package com.ctitc.es;

import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.http.HttpHost;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentType;
import org.joda.time.DateTime;

import com.alibaba.fastjson.JSONObject;
import com.ctitc.util.Order;

/**
 * 使用高級api
 * 
 * @author zongbo
 *
 */
public class HighRestClientForOrder {

    public static int count = 0;

    public static void main(String[] args) {
        RestHighLevelClient client = null;

        try {
            client = new RestHighLevelClient(RestClient.builder(
                    new HttpHost("192.168.1.191", 9200, "http")
                    // , new HttpHost("192.168.1.192", 9200, "http") 多個用逗號分隔
            ));

            long startTimeall = System.currentTimeMillis();
            for (int cityIndex = 0; cityIndex < 10; cityIndex++) {// 模擬地市

                for (int barIndex = 0; barIndex < 100; barIndex++) {// 模擬規(guī)格

                    long startTime = System.currentTimeMillis();

                    List<Order> list = getOrderList(cityIndex, barIndex);

                    long endTime1 = System.currentTimeMillis();
                    System.out.println("查詢時間:" + (endTime1 - startTime) + "ms");

                    BulkResponse reponse = save(client, list);
                    if (reponse.hasFailures()) {
                        System.out.println("本次請求有錯誤 " + reponse.buildFailureMessage());
                    }
                    long endTime = System.currentTimeMillis();

                    System.out.println("單次遷移時間: " + (endTime - startTime) + "ms列粪,查詢時間:" + (endTime1 - startTime)
                            + "ms审磁,插入es時間:" + (endTime - endTime1));

                }

            }

            long endTimeall = System.currentTimeMillis(); // 獲取結束時間
            System.out.println("所有運行時間: " + (endTimeall - startTimeall) + "ms");

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (client != null) {
                try {
                    client.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }

    }

    private static List<Order> getOrderList(int cityIndex, int barIndex) throws SQLException {
        String cityCode = "city_" + cityIndex;
        String barCode = "bar_" + barIndex;

        DateTime dt = DateTime.now();
        List<Order> list = new ArrayList<Order>();
        for (int i = 0; i < 20; i++) {// 模擬日期
            String dateId = dt.plusDays(i).toString("yyyyMMdd");
            for (int j = 1; j < 30; j++) {// 模擬檔位
                int levelCode = j;
                for (int x = 0; x < 200; x++) {// 模擬零售戶
                    String retailerCode = "retailer_" + x;
                    int orderTime = x % 9 == 0 ? 2 : 1;
                    for (int y = 0; y < orderTime; y++) {// 模擬零售戶訂購次數(shù)
                        Order o = new Order();
                        o.setOrderCode("order_" + count++);
                        o.setUpdateTime(new Date());
                        o.setBarCode(barCode);
                        o.setCityCode(cityCode);
                        o.setDateId(dateId);
                        o.setLevelCode(levelCode);
                        o.setRetailerCode(retailerCode);
                        o.setSaleMoney((1000.0 + (int) (Math.random() * 100)));
                        o.setSaleNum((5.0 + (int) (Math.random() * 10)));// 條 5-15
                        o.setNeedNum((15.0 + (int) (Math.random() * 10)));// 條 5-15
                        list.add(o);
                    }
                }
            }
        }

        return list;
    }

    private static BulkResponse save(RestHighLevelClient client, List<Order> list) throws IOException {
        BulkRequest request = new BulkRequest();
        request.timeout(TimeValue.timeValueMinutes(1)); // 設置超時谈飒,等待所有節(jié)點確認索引已打開(使用TimeValue形式)
        // request.timeout("2m"); //設置超時,等待所有節(jié)點確認索引已打開(使用字符串形式)
        for (Order o : list) {
            // 添加到請求中 索引:retailer 類型:base _id:retaielr.getRetailerCode()
            request.add(new IndexRequest("order", "order").source(JSONObject.toJSONString(o), XContentType.JSON));
        }
        // 執(zhí)行請求
        return client.bulk(request);
    }

}

  • 其中Order是與es mapping字段一樣的javaBean
package com.ctitc.util;

import java.util.Date;

public class Order {
    private String retailerCode;
    private String dateId;
    private String orderCode;
    private String barCode;
    private Double saleNum;
    private Double saleMoney;
    private Double needNum;
    private int levelCode;
    private String cityCode;
    private Date updateTime ;
    
    
    
    public Date getUpdateTime() {
        return updateTime;
    }
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
    public String getRetailerCode() {
        return retailerCode;
    }
    public void setRetailerCode(String retailerCode) {
        this.retailerCode = retailerCode;
    }
    public String getDateId() {
        return dateId;
    }
    public void setDateId(String dateId) {
        this.dateId = dateId;
    }
    public String getOrderCode() {
        return orderCode;
    }
    public void setOrderCode(String orderCode) {
        this.orderCode = orderCode;
    }
    public String getBarCode() {
        return barCode;
    }
    public void setBarCode(String barCode) {
        this.barCode = barCode;
    }
    public Double getSaleNum() {
        return saleNum;
    }
    public void setSaleNum(Double saleNum) {
        this.saleNum = saleNum;
    }
    public Double getSaleMoney() {
        return saleMoney;
    }
    public void setSaleMoney(Double saleMoney) {
        this.saleMoney = saleMoney;
    }
    public Double getNeedNum() {
        return needNum;
    }
    public void setNeedNum(Double needNum) {
        this.needNum = needNum;
    }
    public int getLevelCode() {
        return levelCode;
    }
    public void setLevelCode(int levelCode) {
        this.levelCode = levelCode;
    }
    public String getCityCode() {
        return cityCode;
    }
    public void setCityCode(String cityCode) {
        this.cityCode = cityCode;
    }
    
    
    
}

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末态蒂,一起剝皮案震驚了整個濱河市杭措,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌钾恢,老刑警劉巖手素,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異瘩蚪,居然都是意外死亡泉懦,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門疹瘦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來崩哩,“玉大人,你說我怎么就攤上這事言沐〉肃冢” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵险胰,是天一觀的道長汹押。 經常有香客問我,道長起便,這世上最難降的妖魔是什么鲸阻? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮缨睡,結果婚禮上鸟悴,老公的妹妹穿的比我還像新娘。我一直安慰自己奖年,他們只是感情好细诸,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著陋守,像睡著了一般震贵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上水评,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天猩系,我揣著相機與錄音,去河邊找鬼中燥。 笑死寇甸,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播拿霉,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼吟秩,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了绽淘?” 一聲冷哼從身側響起涵防,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎沪铭,沒想到半個月后壮池,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡杀怠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年火窒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片驮肉。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖已骇,靈堂內的尸體忽然破棺而出离钝,到底是詐尸還是另有隱情,我是刑警寧澤褪储,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布卵渴,位于F島的核電站,受9級特大地震影響鲤竹,放射性物質發(fā)生泄漏浪读。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一辛藻、第九天 我趴在偏房一處隱蔽的房頂上張望碘橘。 院中可真熱鬧,春花似錦吱肌、人聲如沸痘拆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纺蛆。三九已至,卻和暖如春规揪,著一層夾襖步出監(jiān)牢的瞬間桥氏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工猛铅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留字支,地道東北人。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像祥款,于是被迫代替她去往敵國和親清笨。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內容

  • Solr&ElasticSearch原理及應用 一刃跛、綜述 搜索 http://baike.baidu.com/it...
    樓外樓V閱讀 7,262評論 1 17
  • 在上一篇文章中抠艾,我們知道client和ES交互的數(shù)據(jù)格式都是json,也知道了ES中的index和type的關系桨昙。...
    11舍的華萊士閱讀 3,322評論 0 1
  • 轉 # https://www.cnblogs.com/easypass/archive/2010/12/ 08/...
    呂品?閱讀 9,709評論 0 44
  • 我检号,不愿只做浮云,飄揚在寂寞的夜空中蛙酪,看你的影印在心湖之上齐苛; 我,不遠只做高山桂塞,聳立在密林之間凹蜂,偷望你嬌美的臉龐;...
    雲(yún)開月明閱讀 204評論 0 1
  • 你 看不透的你 一直那樣笑著的你 有點傻的你 你 看不透的你 一直那樣沉默的你 灰色的你 你 看不透的你 總想問你...
    蘇莫丂閱讀 254評論 2 2