Kibana請(qǐng)求Elasticsearch增刪改查操作

1、基礎(chǔ)概念

概念 說(shuō)明
索引庫(kù)(indices) indices是index的復(fù)數(shù),代表許多的索引删掀,
類型(type) 類型是模擬mysql中的table概念,一個(gè)索引庫(kù)下可以有不同類型的索引导街,比如商品索引披泪,訂單索引,其數(shù)據(jù)格式不同搬瑰。不過(guò)這會(huì)導(dǎo)致索引庫(kù)混亂款票,因此未來(lái)版本中會(huì)移除這個(gè)概念
文檔(document) 存入索引庫(kù)原始的數(shù)據(jù)。比如每一條商品信息泽论,就是一個(gè)文檔
字段(field) 文檔中的屬性
映射配置(mappings) 字段的數(shù)據(jù)類型艾少、屬性、是否索引翼悴、是否存儲(chǔ)等特性
  • 索引集(Indices缚够,index的復(fù)數(shù)):邏輯上的完整索引
  • 分片(shard):數(shù)據(jù)拆分后的各個(gè)部分
  • 副本(replica):每個(gè)分片的復(fù)制

要注意的是:Elasticsearch本身就是分布式的,因此即便你只有一個(gè)節(jié)點(diǎn)鹦赎,Elasticsearch默認(rèn)也會(huì)對(duì)你的數(shù)據(jù)進(jìn)行分片和副本操作谍椅,當(dāng)你向集群添加新數(shù)據(jù)時(shí),數(shù)據(jù)也會(huì)在新加入的節(jié)點(diǎn)中進(jìn)行平衡。

2、索引操作

創(chuàng)建索引

PUT /索引庫(kù)名
{
     "settings": {
        "number_of_shards": 3,  //分片數(shù)量
        "number_of_replicas": 2  //副本數(shù)量
      }
}

查看索引
GET /索引庫(kù)名
GET _cat/indices 查看所有索引
刪除索引
DELETE /索引庫(kù)名

3草娜、映射字段

創(chuàng)建映射字段

PUT /索引庫(kù)名/_mapping
{
  "properties": {
    "字段名": {
      "type": "類型",
      "index": true,
      "store": true杖们,
      "analyzer": "分詞器"
    }
  }
}
  • 字段名:任意填寫 ,可以指定許多屬性膊毁,例如:
  • type:類型胀莹,可以是text基跑、long婚温、short、date媳否、integer栅螟、object等
  • index:是否索引荆秦,默認(rèn)為true
  • store:是否存儲(chǔ),默認(rèn)為false
  • analyzer:分詞器力图,這里的ik_max_word即使用ik分詞器
PUT xiaomi/_mapping
{
  "properties": {
    "title": {
      "type": "text",
      "analyzer": "ik_max_word"
    },
    "images": {
      "type": "keyword",
      "index": "false"
    },
    "price": {
      "type": "float"
    }
  }
}

查看映射關(guān)系
GET /索引庫(kù)名/_mapping
字段屬性詳解

  • String類型步绸,又分兩種:
    • text:可分詞,不可參與聚合
    • keyword:不可分詞吃媒,數(shù)據(jù)會(huì)作為完整字段進(jìn)行匹配瓤介,可以參與聚合
      Numerical:數(shù)值類型,分兩類
    • 基本數(shù)據(jù)類型:long赘那、interger刑桑、short、byte募舟、double祠斧、float、half_float
    • 浮點(diǎn)數(shù)的高精度類型:scaled_float
      • 需要指定一個(gè)精度因子拱礁,比如10或100琢锋。elasticsearch會(huì)把真實(shí)值乘以這個(gè)因子后存儲(chǔ),取出時(shí)再還原呢灶。
  • Date:日期類型
    • elasticsearch可以對(duì)日期格式化為字符串存儲(chǔ)吴超,但是建議我們存儲(chǔ)為毫秒值,存儲(chǔ)為long填抬,節(jié)省空間烛芬。

4、數(shù)據(jù)的增刪改

4.1隨機(jī)生成id

POST /xiaomi/_doc
{
    "title":"小米手機(jī)",
    "images":"http://image.leyou.com/12479122.jpg",
    "price":2699.00
}

4.2自定義id

POST /xiaomi/_doc/2
{
    "title":"大米手機(jī)",
    "images":"http://image.leyou.com/12479122.jpg",
    "price":2899.00
}

4.3新增數(shù)據(jù)時(shí)使用在配置映射之外的字段

額外添加了stock庫(kù)存飒责,和saleable是否上架兩個(gè)字段

POST /xiaomi/_doc/3
{
    "title":"超米手機(jī)",
    "images":"http://image.leyou.com/12479122.jpg",
    "price":2899.00,
    "stock": 200,
    "saleable":true
}

結(jié)果

{
  "_index": "xiaomi",
  "_type": "goods",
  "_id": "3",
  "_version": 1,
  "_score": 1,
  "_source": {
    "title": "超米手機(jī)",
    "images": "http://image.leyou.com/12479122.jpg",
    "price": 2899,
    "stock": 200,
    "saleable": true
  }
}

Elasticsearch非常智能赘娄,你不需要給索引庫(kù)設(shè)置任何mapping映射,它也可以根據(jù)你輸入的數(shù)據(jù)來(lái)判斷類型宏蛉,動(dòng)態(tài)添加數(shù)據(jù)映射遣臼。

4.4修改數(shù)據(jù)

把剛才新增的請(qǐng)求方式改為PUT,就是修改了拾并。不過(guò)修改必須指定id揍堰,

  • id對(duì)應(yīng)文檔存在,則修改
  • id對(duì)應(yīng)文檔不存在嗅义,則新增
PUT /xiaomi/_doc/3
{
    "title":"超大米手機(jī)",
    "images":"http://image.leyou.com/12479122.jpg",
    "price":3899.00,
    "stock": 100,
    "saleable":true
}

4.5刪除數(shù)據(jù)

DELETE /索引庫(kù)名/類型名/id值

5屏歹、查詢數(shù)據(jù)

基礎(chǔ)語(yǔ)法

GET /索引庫(kù)名/_search
{
    "query":{
        "查詢類型":{
            "查詢條件":"查詢條件值"
        }
    }
}

5.1查詢所有match_all

GET /xiaomi/_search
{
    "query":{
        "match_all": {}
    }
}

結(jié)果

{
  "took": 2,  //查詢花費(fèi)時(shí)間,單位是毫秒
  "timed_out": false,  //是否超時(shí)
  "_shards": {  //分片信息
    "total": 3,
    "successful": 3,
    "skipped": 0,
    "failed": 0
  },
  "hits": {   //搜索結(jié)果總覽對(duì)象
    "total": 1,  //搜索到的總條數(shù)
    "max_score": 1,  //所有結(jié)果中文檔得分的最高分
    "hits": [   //搜索結(jié)果的文檔對(duì)象數(shù)組之碗,每個(gè)元素是一條搜索到的文檔信息
      {
        "_index": "xiaomi",  //索引庫(kù)
        "_type": "goods",   //文檔類型
        "_id": "2",   //文檔id
        "_score": 1,  //文檔得分
        "_source": {  //文檔的源數(shù)據(jù)
          "title": "大米手機(jī)",
          "images": "http://image.leyou.com/12479122.jpg",
          "price": 2899
        }
      }
      }
    ]
  }
}

5.2匹配查詢match

or關(guān)系
match類型查詢蝙眶,會(huì)把查詢條件進(jìn)行分詞,然后進(jìn)行查詢,多個(gè)詞條之間是or的關(guān)系

GET /xiaomi/_search
{
    "query":{
        "match":{
            "title":"小米電視"
        }
    }
}

and關(guān)系

  • 即對(duì)關(guān)鍵詞進(jìn)行分詞以后褪那,查詢包括所有分詞條件的數(shù)據(jù)
GET /xiaomi/_search
{
    "query":{
        "match": {
          "title": {
            "query": "小米電視",
            "operator": "and"
          }
        }
    }
}

or和and如何選擇

在 or 與 and 間二選一有點(diǎn)過(guò)于非黑即白幽纷。 如果用戶給定的條件分詞后有 5 個(gè)查詢?cè)~項(xiàng)式塌,想查找只包含其中 4 個(gè)詞的文檔,該如何處理友浸?將 operator 操作符參數(shù)設(shè)置成 and 只會(huì)將此文檔排除峰尝。
有時(shí)候這正是我們期望的,但在全文搜索的大多數(shù)應(yīng)用場(chǎng)景下收恢,我們既想包含那些可能相關(guān)的文檔武学,同時(shí)又排除那些不太相關(guān)的。換句話說(shuō)伦意,我們想要處于中間某種結(jié)果劳淆。
match 查詢支持 minimum_should_match 最小匹配參數(shù), 這讓我們可以指定必須匹配的詞項(xiàng)數(shù)用來(lái)表示一個(gè)文檔是否相關(guān)默赂。我們可以將其設(shè)置為某個(gè)具體數(shù)字沛鸵,更常用的做法是將其設(shè)置為一個(gè)百分?jǐn)?shù),因?yàn)槲覀儫o(wú)法控制用戶搜索時(shí)輸入的單詞數(shù)量

GET /xiaomi/_search
{
    "query":{
        "match":{
            "title":{
                "query":"小米曲面電視",
                "minimum_should_match": "75%"
            }
        }
    }
}

5.3多字段查詢multi_match

multi_matchmatch類似缆八,不同的是它可以在多個(gè)字段中查詢

GET /xiaomi/_search
{
    "query":{
        "multi_match": {
            "query":    "小米",
            "fields":   [ "title", "subTitle" ]
        }
    }
}

5.4 詞條匹配term

term 查詢被用于精確值 匹配曲掰,這些精確值可能是數(shù)字、時(shí)間奈辰、布爾或者那些未分詞的字符串

GET /xiaomi/_search
{
    "query":{
        "term":{
            "price":2699.00
        }
    }
}

5.5 多詞條精確匹配terms

terms 查詢和 term 查詢一樣栏妖,但它允許你指定多值進(jìn)行匹配。如果這個(gè)字段包含了指定值中的任何一個(gè)值奖恰,那么這個(gè)文檔滿足條件:

GET /xiaomi/_search
{
    "query":{
        "terms":{
            "price":[2699.00,2899.00,3899.00]
        }
    }
}

6吊趾、查詢結(jié)果過(guò)濾

默認(rèn)情況下,elasticsearch在搜索的結(jié)果中瑟啃,會(huì)把文檔中保存在_source的所有字段都返回
如果我們只想獲取其中的部分字段论泛,我們可以添加_source的過(guò)濾

6.1直接指定字段

GET /xiaomi/_search
{
  "_source": ["title","price"],
  "query": {
    "term": {
      "price": 2699
    }
  }
}

6.2指定includes和excludes

  • includes:來(lái)指定想要顯示的字段
  • excludes:來(lái)指定不想要顯示的字段
GET /xiaomi/_search
{
  "_source": {
    "includes":["title","price"]
  },
  "query": {
    "term": {
      "price": 2699
    }
  }
}

7、高級(jí)查詢

7.1 布爾組合 bool

bool把各種其它查詢通過(guò)must(與)蛹屿、must_not(非)屁奏、should(或)的方式進(jìn)行組合

GET /xiaomi/_search
{
    "query":{
        "bool":{
            "must":     { "match": { "title": "大米" }},
            "must_not": { "match": { "title":  "電視" }},
            "should":   { "match": { "title": "手機(jī)" }}
        }
    }
}

7.2 范圍查詢 range

range 查詢找出那些落在指定區(qū)間內(nèi)的數(shù)字或者時(shí)間

GET /xiaomi/_search
{
    "query":{
        "range": {
            "price": {
                "gte":  1000.0,
                "lt":   2800.00
            }
        }
    }
}

range查詢?cè)试S以下字符:

操作符 說(shuō)明
gt 大于
gte 大于等于
lt 小于
lte 小于等于

7.3 模糊查詢 fuzzy

POST /heima/goods/4
{
    "title":"iphone手機(jī)",
    "images":"http://image.leyou.com/12479122.jpg",
    "price":6899.00
}

fuzzy 查詢是 term 查詢的模糊等價(jià)。它允許用戶搜索詞條與實(shí)際詞條的拼寫出現(xiàn)偏差错负,但是偏差的編輯距離不得超過(guò)2:

GET /xiaomi/_search
{
  "query": {
    "fuzzy": {
      "title": "iphona"
    }
  }
}

可以通過(guò)fuzziness來(lái)指定允許的編輯距離:

GET /xiaomi/_search
{
  "query": {
    "fuzzy": {
        "title": {
            "value":"iphona",
            "fuzziness":1
        }
    }
  }
}

7.4 過(guò)濾 filter

條件查詢中進(jìn)行過(guò)濾

所有的查詢都會(huì)影響到文檔的評(píng)分及排名坟瓢。如果我們需要在查詢結(jié)果中進(jìn)行過(guò)濾,并且不希望過(guò)濾條件影響評(píng)分犹撒,那么就不要把過(guò)濾條件作為查詢條件來(lái)用折联。而是使用filter方式:

GET /xiaomi/_search
{
    "query":{
        "bool":{
            "must":{ "match": { "title": "小米手機(jī)" }},
            "filter":{
                "range":{"price":{"gt":2000.00,"lt":3800.00}}
            }
        }
    }
}

無(wú)查詢條件,直接過(guò)濾
如果一次查詢只有過(guò)濾识颊,沒(méi)有查詢條件诚镰,不希望進(jìn)行評(píng)分,我們可以使用constant_score取代只有 filter 語(yǔ)句的 bool 查詢。在性能上是完全相同的怕享,但對(duì)于提高查詢簡(jiǎn)潔性和清晰度有很大幫助。

GET /xiaomi/_search
{
    "query":{
        "constant_score":   {
            "filter": {
                 "range":{"price":{"gt":2000.00,"lt":3000.00}}
            }
        }
}

7.5 排序 Sort

GET /xiaomi/_search
{
  "query": {
    "match": {
      "title": "小米手機(jī)"
    }
  },
  "sort": [
    {
      "price": {
        "order": "desc"
      }
    }
  ]
}

多字段排序

GET /xiaomi/_search
{
    "query":{
        "bool":{
            "must":{ "match": { "title": "小米手機(jī)" }},
            "filter":{
                "range":{"price":{"gt":200000,"lt":300000}}
            }
        }
    },
    "sort": [
      { "price": { "order": "desc" }},
      { "_score": { "order": "desc" }}
    ]
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末镰踏,一起剝皮案震驚了整個(gè)濱河市函筋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌奠伪,老刑警劉巖跌帐,帶你破解...
    沈念sama閱讀 223,002評(píng)論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異绊率,居然都是意外死亡谨敛,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門滤否,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)脸狸,“玉大人,你說(shuō)我怎么就攤上這事藐俺〈都祝” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 169,787評(píng)論 0 365
  • 文/不壞的土叔 我叫張陵欲芹,是天一觀的道長(zhǎng)卿啡。 經(jīng)常有香客問(wèn)我,道長(zhǎng)菱父,這世上最難降的妖魔是什么颈娜? 我笑而不...
    開(kāi)封第一講書人閱讀 60,237評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮浙宜,結(jié)果婚禮上官辽,老公的妹妹穿的比我還像新娘。我一直安慰自己粟瞬,他們只是感情好野崇,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,237評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著亩钟,像睡著了一般乓梨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上清酥,一...
    開(kāi)封第一講書人閱讀 52,821評(píng)論 1 314
  • 那天扶镀,我揣著相機(jī)與錄音,去河邊找鬼焰轻。 笑死臭觉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蝠筑,決...
    沈念sama閱讀 41,236評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼狞膘,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了什乙?” 一聲冷哼從身側(cè)響起挽封,我...
    開(kāi)封第一講書人閱讀 40,196評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎臣镣,沒(méi)想到半個(gè)月后辅愿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,716評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡忆某,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,794評(píng)論 3 343
  • 正文 我和宋清朗相戀三年点待,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弃舒。...
    茶點(diǎn)故事閱讀 40,928評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡癞埠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出聋呢,到底是詐尸還是另有隱情燕差,我是刑警寧澤,帶...
    沈念sama閱讀 36,583評(píng)論 5 351
  • 正文 年R本政府宣布坝冕,位于F島的核電站徒探,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏喂窟。R本人自食惡果不足惜测暗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,264評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望磨澡。 院中可真熱鬧碗啄,春花似錦、人聲如沸稳摄。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,755評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)厦酬。三九已至胆描,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間仗阅,已是汗流浹背昌讲。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,869評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留减噪,地道東北人短绸。 一個(gè)月前我還...
    沈念sama閱讀 49,378評(píng)論 3 379
  • 正文 我出身青樓车吹,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親醋闭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子窄驹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,937評(píng)論 2 361

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