當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
尚硅谷-SpringBoot高级-检索-Elasticsearch快速入门
生活随笔
收集整理的這篇文章主要介紹了
尚硅谷-SpringBoot高级-检索-Elasticsearch快速入门
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前面我們安裝好了ElasticSearch,我以后就簡稱他為ES,而一些人還不知道基本的使用,那我們接下來做一個快速入門,了解一下他的使用方法,以及一些基本概念,方便我們后來整合,那么要學習ES最好的工具呢,就是我們官方文檔,ElasticSearch的官方就是elastic.cohttps://www.elastic.co/cn/learn在了解這一塊,有一個docs,https://www.elastic.co/guide/index.html最下邊有一個簡體中文https://www.elastic.co/guide/cn/index.html點進來就有一個ES的權威指南https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html我們就從這兒開始學習ES,我們這塊會刷出目錄結構,前兩章序言前言就不看了,基礎入門來掌握一些核心概念,我們從第一章"你知道的, 為了搜索…",這一塊我們要說一個核心概念,安裝這些我們已經安裝完了,第一個叫"面向文檔",https://www.elastic.co/guide/cn/elasticsearch/guide/current/_document_oriented.htmlElasticSearch它是一個面向文檔的,也就是它會存儲整個對象,或者文檔,不像MYSQL,存儲的是數據的一些行列,而存儲了文檔以后呢,Elastic可以進行索引,檢索,排序,過濾,他的數據類型是很豐富的,而且在ES中,我們是使用JSON作為序列化格式的,也就是說,比如我們一個USER對象,最終放到我們ES中,會轉化成JSON的格式,類似于這個樣子{"email": "john@smith.com","first_name": "John","last_name": "Smith","info": {"bio": "Eco-warrior and defender of the weak","age": 25,"interests": [ "dolphins", "whales" ]},"join_date": "2014/05/01"
}JSON大家都知道,天然的輕量級,和跨平臺的優勢,那么以后我們一個JSON文檔,他就代表一個數據對象,接下來我們來看下一章https://www.elastic.co/guide/cn/elasticsearch/guide/current/_finding_your_feet.html這個就是ES的基本概念,對于ES的初次使用呢,基本概念是難以理解的,不過他在這舉了一個例子,比如我們要創建一個雇員目錄,我們Megacorp公司,他有一些員工信息,我們這個員工信息呢,經常要進行檢索,分析等等,我們要創建一些員工信息,保存在ES中,通過這個例子我們看一下有什么相關的概念https://www.elastic.co/guide/cn/elasticsearch/guide/current/_indexing_employee_documents.html他叫索引雇員文檔,我們ES里面要進行數據檢索,那ES里面要存一些數據,所以說我們第一個需求,就是要存儲一些雇員數據,放在ES中,而我們這些員工數據呢,是以雇員文檔,剛才看的JSON文檔的方式,一個JSON文檔代表一個雇員,而我們把給ES存數據的,行為叫做索引,其實就是存儲的意思而已,只不過索引還有一些概念,你想把一個信息存儲到ES中,你要索引在ES中之前,你需要確定我們的文檔數據,到底要存在ES的哪里,那么就牽涉到一些概念,在ES集群里邊,可以有多個索引,前面的索引叫做動詞,后面的又稱為名詞的形式,然后每個索引可以包含多個類型,每個類型又包含多個文檔,每個文檔又包含多個屬性,這段話什么意思呢
我們想給ES集群里面存儲數據,比如有谷歌公司,有microsoft公司,有剛才說的megacorp公司,我們要存儲員工數據,我們首先確定這個員工是哪個公司的,我可以存在這個節點里面,我們這個節點是megacorp公司的,我們存在這兒,所以我們把這些東西叫做索引,我們第一層叫做索引,我們這個公司有員工信息,也有他的一些產品,包括還有一些他的部門,你存的到底是哪些數據,那么第二級我們稱之為類型,我接下來要存的是員工信息,而員工信息呢,數據是什么,我們每一個數據文檔,JSON都放到這兒,存了三個文檔,所以這三條數據都叫做文檔,而這個文檔里面呢,自然就有他的屬性,比如員工的ID,員工的名字,員工的age,這就是我們說的索引類型,文檔屬性,其實類比到MYSQL,就非常簡單了,什么叫索引呢,就相當于我們MYSQL的數據庫一樣,我們連上MYSQL,到底要給哪個數據庫里面存東西,我們MYSQL里面有很多數據庫,而數據庫里邊又有非常多的表,要是給employee表里存數據,還是要給department表里存數據,類型就是對應MYSQL里的表,表里會有一行一行的記錄,這個記錄就是我們說的文檔,表里的列,都有它的字段,這個我們就稱為屬性,這個和MYSQL的關系基本是一樣的,結合這些概念我們參照ES文檔
我們給ES中存儲一些員工數據,比如下邊的一個例子,我們想要保存一個員工數據,我們將要做這么四步操作,哪四步操作呢,每一個員工我們都保存一個文檔,所謂的文檔就是JSON數據,這個文檔是employee類型,這個數據是員工類型的,而且這個文檔放在megacorp這個索引內,然后我們要把保存在ES中,那要做這個操作,看起來很多,其實只需要發一個PUT請求PUT /megacorp/employee/1
{"first_name" : "John","last_name" : "Smith","age" : 25,"about" : "I love to go rock climbing","interests": [ "sports", "music" ]
}PUT請求的URL地址呢,前面第一位是索引的名字,把什么數據放在什么位置,放在索引的位置,然后第二個是數據類型的名字,我們是放在employee里面,最后一個是數據的特定標識,我的一號數據,這個消息體就是我們請求的JSON,我們就來發送這個PUT請求,我們就來結合POSTMAN來發送請求,我們來給ES來發請求,把這個關掉,首先把我們的地址復制過來,這是我們交互的地址localhost:9200接下來我們要索引一個員工,我們把URL地址拿過來,然后他必須是一個PUT請求,PUT請求需要帶JSON數據,這個數據是員工的文檔,JSON數據我們選擇raw,txt我們選擇application/json,這是我們要帶的JSON數據,這塊PUT我們來發送
{"first_name" : "Jane","last_name" : "Smith","age" : 32,"about" : "I like to collect rock albums","interests": [ "music" ]
}/megacorp/employee/2PUT /megacorp/employee/3
{"first_name" : "Douglas","last_name" : "Fir","age" : 35,"about": "I like to build cabinets","interests": [ "forestry" ]
}這三號員工也保存,那么我們就給ES中存儲了這么幾個數據,有了這數據呢,ES就能幫我們分析和搜索數據了,我們繼續往高級看,檢索文檔https://www.elastic.co/guide/cn/elasticsearch/guide/current/_retrieving_a_document.html我們之前存了一些數據,我想要檢索出來,我怎么辦呢,還是發請求,來發一個GET請求GET /megacorp/employee/1只要把PUT請求改成GET請求
發現這一塊有響應,響應出來索引,類型,id,包括他找到的數據,found true已經找到了,source就是找到的數據,這個數據有員工的first_name,last_name,age,還有員工的about,interests,這數據我們暫時就檢索到了,發送各種請求都能搜到,同樣如果你把GET變成DELETE,這個就是刪除,如果變成HEAD請求,這是來檢查,不是有這個員工,我來發送HEAD,我發現這塊沒有響應體數據,HEAD請求不存在響應體,注意如果有員工的情況下,3號員工我們有,這塊的響應碼是200,響應狀態碼是404
我們發現這一塊請求處理完了,這里有響應,響應的內容包括,你這個數據放進哪個索引里面,類型是什么,id是什么,包括這個數據的版本,這個數據是剛才創建的,包括等等一些信息,都在這,這是我們一個數據,那我們來保存更多的數據,我把二號的員工復制來所以這是REST風格,響應404這個資源就沒有,這是我們HEAD檢查有沒有員工,包括DELETE還能刪,比如我發delete請求,我要刪3號員工,他寫found等于true,已經找到了,而且最終是把他delete刪掉,刪掉我們再來發get請求,我們發現found false
就找不到三號了,我們的GET是用來檢索文檔,delete我們可以來刪除文檔,head檢查文檔是否存在,如果我們想要更新,我們再用PUT命令,新增和修改文檔,我們只需要REST API的操作就行了,比如我們還是之前的1號員工為例,我們在保存1號員工的時候呢,我們之前已經保存過一次了,我再來保存一次,比如我要把25改成28,{"first_name" : "John","last_name" : "Smith","age" : 28,"about" : "I love to go rock climbing","interests": [ "sports", "music" ]
}我再來保存的時候呢,發現Version會疊加
result是update,我們第一次添加是created,而我們以后還是一號用戶,版本每次都會增加,這就是我們使用REST風格,就是改變我們請求方式,對ES中的數據進行增刪改查,我們繼續來測試更多的基本功能,我們點進輕量搜索里邊https://www.elastic.co/guide/cn/elasticsearch/guide/current/_search_lite.html如果我們想要搜素所有的員工,以前我們在這些文檔的IDGET /megacorp/employee/_search現在我們只要變成_search我們來試一下,所有數據都在hits里面,有index,有數據的索引,類型,以及ID,我們接下來再往下看,這里還有ID為1的,一個叫Jane,一個叫Jone
這是找所有,包括我們想要哪些條件,比如我們要想找last_name是Smith的GET /megacorp/employee/_search?q=last_name:Smith我們只需要帶上這個參數,q=last_name:Smith,這個我們稱為查詢字符串,http://59.110.158.145:9200/megacorp/employee/_search?q=last_name:Smith我們也同樣找到了
他們的last_name都叫Smith,只不過一個叫Jane,一個叫Jone,而我們這個有相關性得分,我們就得到了這條結果,我們可以看更多的搜索查詢,比如我們搜索的時候不寫查詢字符串,我們使用查詢的表達式,所謂查詢表達式呢,給ES提供一串JSON表達式,JSON里面指定查詢規則,GET /megacorp/employee/_search
{"query" : {"match" : {"last_name" : "Smith"}}
}語法大概看一下,查詢按照一個匹配規則,匹配規則就是last_name等于Smith,更多的語法可以結合文檔慢慢的學習,雖然這個示例是發GET請求,他這個東西是放在請求體中的,GET沒有請求體,所以我們測試的時候發POST就行了,查詢還是不用寫查詢字符串了,寫上我們這些查詢規則
我們看到和之前的效果是一樣的,total找到兩個沒問題,這個JSON查詢的表達式,是非常重要的,比如這里有一個更復雜的查詢示例,只要我們把查詢表達式寫的復雜,他就會做更復雜的工作,GET /megacorp/employee/_search
{"query" : {"bool": {"must": {"match" : {"last_name" : "smith" }},"filter": {"range" : {"age" : { "gt" : 30 } }}}}
}匹配last_name是Smith的,filter要過濾,按照什么過濾呢,按照年齡要大于30歲以上,所以我們寫了一個復雜的查詢規則
定義復雜的查詢表達式,我們繼續檢索其他的檢索功能,我們來找全文檢索,全文檢索我來換上一個表達式GET /megacorp/employee/_search
{"query" : {"match" : {"about" : "rock climbing"}}
}我們根據員工的about字段查,查他是否有"rock climbing",我們來點一個send
還有短語檢索https://www.elastic.co/guide/cn/elasticsearch/guide/current/_phrase_search.html我們剛才看到全文檢索的情況下,我們要檢索的這兩個字段,你有任何一個都行,但是往往我們有時候要檢索,要他完全匹配,我們把它當做一個完整的單詞,而不是分詞了,要把它當成完整的單詞呢,來進行搜索POST /megacorp/employee/_search
{"query" : {"match_phrase" : {"about" : "rock climbing"}}
}這個時候就只會查處一個結果了,他要完整匹配, 把rock_climbing當成一個單詞,那只能查出一條記錄,這就是我們說的短語搜索,把它當成一個完整的短語,還有高亮搜索https://www.elastic.co/guide/cn/elasticsearch/guide/current/highlighting-intro.html比如我們還是按照完全匹配的方式,找rock_climbing,然后我們要高亮的字段,在這指定,這是新的查詢表達式POST /megacorp/employee/_search
{"query" : {"match_phrase" : {"about" : "rock climbing"}},"highlight": {"fields" : {"about" : {}}}
}
?
總結
以上是生活随笔為你收集整理的尚硅谷-SpringBoot高级-检索-Elasticsearch快速入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringBoot高级-检索-Elas
- 下一篇: SpringBoot高级-检索-Spri