Elastic Search 基本操作

插入

{
    "name": "monkey",
    "country": "China",
    "age": "18",
    "date": "2000-10-01"
}
{
    "name": "楊超越",
    "country": "China",
    "age": "20",
    "date": "1999-10-01"
}

修改

{
    "doc": {
        "name": "齊天大圣"
    }
}
  • 通過腳本修改文檔
    修改man類型中id為1的文檔
    POST 方法
    URL: http://127.0.0.1:9200/people/man/1/_update
    關(guān)鍵字 script,es支持很多腳本語言,這里使用es內(nèi)嵌的腳本語言 painless, 在lang關(guān)鍵字中指定腳本語言,在inline關(guān)鍵字中寫腳本凡纳;ctx._source 指的是要修改文檔的上下文。
    json報文:
{
    "script": {
        "lang": "painless",
        "inline": "ctx._source.age = params.age",
        "params" : {
            "age": "500"
        }
    }
}

刪除操作

查詢

簡單查詢

GET方法
http://127.0.0.1:9200/book/novel/1
http://{ip}:{port}/<索引>/<類型>/<文檔id>

條件查詢

  1. 查詢所有數(shù)據(jù)
    POST方法
    http://127.0.0.1:9200/book/_search
    json報文
{
    "query": {
        "match_all": {}
    }
}

我們發(fā)現(xiàn)事秀,總共有12條數(shù)據(jù)惠呼,但是hits中默認只返回了10條滋早。

  1. 如何指定返回數(shù)據(jù)的條數(shù)以及從哪里返回呢恳守?from從第幾條開始返回考婴,size返回多少條。
{
    "query": {
        "match_all": {}
    },
    "from":1,
    "size":1
}
  1. 指定關(guān)鍵詞查詢
    我們查詢標題里有Elastic的書籍, match_all 改為match, title屬性為待查詢的關(guān)鍵字催烘。默認的排序是以_score字段倒序排列的
{
    "query":{
        "match": {
            "title": "Elastic Search"
        }
    }
}
  1. 自定義排序
    在sort中自定義排序沥阱。
{
    "query":{
        "match_all": {}
    },
    "sort": [
        {
            "publish_date": {
                "order":"desc"
            }
        }
    ],
    "size":15
}

聚合查詢

Elastic Search 中的聚合查詢和group by類似。聚合查詢的關(guān)鍵字是 aggs

  1. 單組聚合
{
    "aggs":{
        "group_by_word_count": { // 這個字段是自己自定義的
            "terms": {
                "field": "word_count" // 按照哪個字段進行聚合查詢
            }
        }
    }
}
  1. 多條件聚合
{
    "aggs":{
        "group_by_word_count": {
            "terms": {
                "field": "word_count"
            }
        },
        "group_by_publish_date": {
            "terms": {
                "field": "publish_date"
            }
        }
    }
}
  1. 查詢某個字段的統(tǒng)計信息
    stats是一個函數(shù)伊群,類似的還有min考杉,max等。
{
    "aggs":{
        "grades_word_count": {
            "stats": {
                "field":"word_count"
            }
        }
    }
}

高級查詢

子條件查詢

特定字段查詢所有特定值

  1. QueryContext
    在查詢過程中在岂,除了判斷文檔是否滿足查詢條件以外奔则,ES還會計算一個_score來標識匹配的程度蛮寂,旨在判斷目標文檔和查詢條件匹配的好壞程度蔽午。
    常用查詢:
  • 全文本查詢 針對文本類型數(shù)據(jù)
    模糊匹配
{
    "query": {
        "match":{
            "title":"Elastic Search入門"
        }
    }
}

查詢結(jié)果

{
    "took": 19,
    "timed_out": false,
    "_shards": {
        "total": 3,
        "successful": 3,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 2,
        "max_score": 4.3062487,
        "hits": [
            {
                "_index": "book",
                "_type": "novel",
                "_id": "2",
                "_score": 4.3062487,
                "_source": {
                    "word_count": 3000,
                    "author": "瓦力",
                    "title": "Elastic Search入門",
                    "publish_date": "2017-03-12"
                }
            },
            {
                "_index": "book",
                "_type": "novel",
                "_id": "5",
                "_score": 1.078649,
                "_source": {
                    "word_count": 3000,
                    "author": "胖子瓦力",
                    "title": "精通Elastic Search",
                    "publish_date": "2017-12-01"
                }
            }
        ]
    }
}

我們分析查詢結(jié)果可以看出,模糊匹配并不能去匹配整個詞語酬蹋。

習語匹配
習語匹配即完全匹配及老。
關(guān)鍵字 match_phrase

{
    "query": {
        "match_phrase":{
            "title":"Elastic Search入門"
        }
    }
}

我們更改了關(guān)鍵字后,匹配的結(jié)果只剩下一條了:

{
    "took": 22,
    "timed_out": false,
    "_shards": {
        "total": 3,
        "successful": 3,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 1,
        "max_score": 5.384897,
        "hits": [
            {
                "_index": "book",
                "_type": "novel",
                "_id": "2",
                "_score": 5.384897,
                "_source": {
                    "word_count": 3000,
                    "author": "瓦力",
                    "title": "Elastic Search入門",
                    "publish_date": "2017-03-12"
                }
            }
        ]
    }
}

多字段匹配查詢
關(guān)鍵字 multi_match

{
    "query":{
        "multi_match":{
            "query":"瓦力",
            "fields":["author", "title"]
        }
    }
}
  • 語法查詢 根據(jù)一定的語法規(guī)則進行的查詢范抓,支持通配符骄恶,范圍查詢,布爾查詢匕垫,正則表達式查詢僧鲁。
    經(jīng)常用在Kibanna中
    關(guān)鍵詞 query_string
{
    "query":{
        "query_string":{
            "query":"(瓦力 AND Search) OR Spring Boot"
        }
    }
}

下面是查詢結(jié)果

{
    "took": 5305,
    "timed_out": false,
    "_shards": {
        "total": 3,
        "successful": 3,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 4,
        "max_score": 2.8850741,
        "hits": [
            {
                "_index": "book",
                "_type": "novel",
                "_id": "2",
                "_score": 2.8850741,
                "_source": {
                    "word_count": 3000,
                    "author": "瓦力",
                    "title": "Elastic Search入門",
                    "publish_date": "2017-03-12"
                }
            },
            {
                "_index": "book",
                "_type": "novel",
                "_id": "11",
                "_score": 1.2587122,
                "_source": {
                    "word_count": 28000,
                    "author": "小馬哥",
                    "title": "精通Sping Boot編程思想",
                    "publish_date": "2019-01-17"
                }
            },
            {
                "_index": "book",
                "_type": "novel",
                "_id": "12",
                "_score": 1.0346642,
                "_source": {
                    "word_count": 21000,
                    "author": "翟超",
                    "title": "Spring Clound微服務實戰(zhàn)",
                    "publish_date": "2018-09-17"
                }
            },
            {
                "_index": "book",
                "_type": "novel",
                "_id": "9",
                "_score": 0.9406741,
                "_source": {
                    "word_count": 15000,
                    "author": "石濤",
                    "title": "Spring Boot2 企業(yè)開發(fā)實戰(zhàn)",
                    "publish_date": "2018-08-01"
                }
            }
        ]
    }
}

語法查詢時,指定搜索的列

{
    "query":{
        "query_string":{
            "query":"瓦力 AND Search",
            "fields":["author","title"]
        }
    }
}
  • 字段級別查詢 針對結(jié)構(gòu)化數(shù)據(jù)象泵,如數(shù)字寞秃、日期等
    針對字段的查詢
{
    "query": {
        "term": {
            "word_count": 3000
        }
    }
}

針對author字段查詢

{
    "query": {
        "term": {
            "author": "瓦力"
        }
    }
}

針對某個字段范圍查詢,關(guān)鍵字 range:如word_count大于3000小于15000偶惠。

{
    "query":{
        "range":{
            "word_count":{
                "gte": 3000,
                "lte": 15000
            }
        }
    }
}

日期字段的范圍查詢:

{
    "query":{
        "range":{
            "publish_date":{
                "gte": "2017-01-01",
                "lte": "now"
            }
        }
    }
}

子條件查詢

Filter Context
在查詢過程中春寿,只判斷該文檔是否滿足條件,只有yes或者No忽孽。
而Query Context在查詢過程中绑改,還會判斷文檔匹配的有多好谢床,會有一個score字段來表示。

查詢1000字的書籍:

{
    "query":{
        "bool":{
            "filter": {
                "term":{
                    "word_count":1000
                }
            }
        }
    }
}

Filter會做數(shù)據(jù)過濾厘线,ES會對Filter的結(jié)果做緩存识腿,因此相對于query速度會快一些。

復合條件查詢

固定分數(shù)查詢

關(guān)鍵詞 constant_score

{
    "query": {
        "constant_score": {
            "filter": {
                "match":{
                    "title":"Elastic"
                }
            }
        }
    }
}

也可以使用boost指定分數(shù)

{
    "query": {
        "constant_score": {
            "filter": {
                "match":{
                    "title":"Elastic"
                }
            },
            "boost":2
        }
    }
}

固定分數(shù)查詢不支持match

布爾查詢

表示或的條件
{
    "query":{
        "bool":{
            "should":[{
                "match":{
                    "author":"瓦力"
                }
            },
            {
                "match":{
                    "title":"Elastic"
                }
            }]
        }
    }
}

表達并且的關(guān)系

{
    "query":{
        "bool":{
            "must":[{
                "match":{
                    "author":"瓦力"
                }
            },{
                "match":{
                    "title":"Elastic"
                }
            }]
        }
    }
}

添加filter過濾條件

{
    "query":{
        "bool":{
            "must":[{
                "match":{
                    "author":"瓦力"
                }
            },{
                "match":{
                    "title":"Elastic"
                }
            }],
            "filter":[{
                "term":{
                    "word_count":3000
                }
            }]
        }
    }
}

表示非的語義
查詢作者不是瓦力的書:

{
    "query":{
        "bool":{
            "must_not":{
                "term":{
                    "author":"瓦力"
                }
            }
        }
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末造壮,一起剝皮案震驚了整個濱河市覆履,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌费薄,老刑警劉巖硝全,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異楞抡,居然都是意外死亡伟众,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門召廷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凳厢,“玉大人,你說我怎么就攤上這事竞慢∠茸希” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵筹煮,是天一觀的道長遮精。 經(jīng)常有香客問我,道長败潦,這世上最難降的妖魔是什么本冲? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮劫扒,結(jié)果婚禮上檬洞,老公的妹妹穿的比我還像新娘。我一直安慰自己沟饥,他們只是感情好添怔,可當我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著贤旷,像睡著了一般广料。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上遮晚,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天性昭,我揣著相機與錄音,去河邊找鬼县遣。 笑死糜颠,一個胖子當著我的面吹牛汹族,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播其兴,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼顶瞒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了元旬?” 一聲冷哼從身側(cè)響起榴徐,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎匀归,沒想到半個月后坑资,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡穆端,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年袱贮,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片体啰。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡攒巍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出荒勇,到底是詐尸還是另有隱情柒莉,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布沽翔,位于F島的核電站兢孝,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏搀擂。R本人自食惡果不足惜西潘,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望哨颂。 院中可真熱鬧,春花似錦相种、人聲如沸威恼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽箫措。三九已至,卻和暖如春衬潦,著一層夾襖步出監(jiān)牢的瞬間斤蔓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工镀岛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留弦牡,地道東北人友驮。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像驾锰,于是被迫代替她去往敵國和親卸留。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,724評論 2 351

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