国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Elasticsearch】Elasticsearch 從入門到精通(二):基礎(chǔ)使用

這篇具有很好參考價值的文章主要介紹了【Elasticsearch】Elasticsearch 從入門到精通(二):基礎(chǔ)使用。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Elasticsearch 從入門到精通》共包含以下 2 2 2 篇文章:

  • Elasticsearch 從入門到精通(一):基本介紹
  • Elasticsearch 從入門到精通(二):基礎(chǔ)使用

?? 如果您覺得這篇文章有用 ?? 的話,請給博主一個一鍵三連 ?????? 吧 (點贊 ??、關(guān)注 ??、收藏 ??)?。?!您的支持 ?????? 將激勵 ?? 博主輸出更多優(yōu)質(zhì)內(nèi)容?。?!

對 Elasticsearch 操作有多種工具,這里我們使用 Kibana,先簡單介紹下。

1.Kibana 的基本介紹

【Elasticsearch】Elasticsearch 從入門到精通(二):基礎(chǔ)使用,# Elasticsearch,elasticsearch,大數(shù)據(jù),搜索引擎

  • Kibana 是一個開源的分析和可視化平臺,設(shè)計用于和 Elasticsearch 一起工作。
  • 可以用 Kibana 來搜索,查看,并和存儲在 Elasticsearch 索引中的數(shù)據(jù)進行交互。
  • 可以輕松地執(zhí)行高級數(shù)據(jù)分析,并且以各種圖標(biāo)、表格和地圖的形式可視化數(shù)據(jù)。
  • Kibana 使得理解大量數(shù)據(jù)變得很容易。它簡單的、基于瀏覽器的界面使你能夠快速創(chuàng)建和共享動態(tài)儀表板,實時顯示 Elasticsearch 查詢的變化。

2.ES 操作前須知

2.1 REST 和 CURL 介紹:

2.1.1 REST

REST(REpresentational State Transfer)從字面意思看 “表述性狀態(tài)傳輸”,它通常是開發(fā)的一種約定,當(dāng)所有的開發(fā)者都遵從這種約定的時候,可以大大簡化開發(fā)的溝通成本。REST 約定用 HTTP 的請求頭 POST、GET、PUTDELETE 正好可以對應(yīng) CRUD(Create、Read、UpdateDelete)四種數(shù)據(jù)操作。

如下表所示:

HTTP 方法 數(shù)據(jù)處理 說明
POST Create 新增一個沒有 ID 的資源
GET Read 獲取一個資源
PUT Update 更新一個資源?;蛐略鲆粋€含 ID 的資源(如果 ID 不存在)
DELETE Delete 刪除一個資源

2.1.2 CURL

CURL 是利用 URL 語法在命令行方式下工作的開源文件傳輸工具,使用 curl 可以簡單實現(xiàn)常見的 get / post 請求。簡單的認(rèn)為是可以在命令行下面訪問 URL 的一個工具。在 Centos 的默認(rèn)庫里面是有 curl 工具的,如果沒有請 yum 安裝即可。

curl 后面可跟參數(shù):

  • -X 指定 HTTP 的請求方法,有 HEAD、GET、POST、PUT、DELETE
  • -d 指定要傳輸?shù)臄?shù)據(jù)
  • -H 指定 HTTP 請求頭信息

Elasticsearch 提供了非常全面和強大的 REST API,通過這些 API,我們可以了解集群的信息。這些 API 可以做如下事情:

  • 檢查集群、節(jié)點和索引的情況、狀態(tài)和統(tǒng)計。
  • 管理集群、節(jié)點、索引數(shù)據(jù)和文檔數(shù)據(jù)。
  • 執(zhí)行 CRUD(創(chuàng)建、讀取、更新和刪除)操作,可以對索引進行操作。
  • 執(zhí)行高級搜索操作,如分頁、排序、過濾、腳本、聚合及其他操作。

2.2 ES 請求方式

首先說下請求 ES 的方式,后面例子都是這種方式。

  • 請求參數(shù):curl -X{PUT} http://{host}:{port}
    • 例如:curl -XPUT http://120.0.0.1:9200/blog1?pretty
    • 在 Kibana 中可直接輸入 PUT /blog1?pretty
  • body 參數(shù):{參數(shù)內(nèi)容}
{
    "settings":{
        "index":{
            "number_of_shards":1,
            "number_of_replicas":0
        }
    }
}

注意:請求方法 GET 和 DELETE 上面介紹了,比較簡單,不過多說,主要說下 POST 和 PUT 在 ES 中的使用。

  • POST 和 PUT 共同點
    • ES 中的 PUT 和 POST 同樣都具備創(chuàng)建和更新的功能。
  • POST 和 PUT 不同點
    • PUT 需要精確到某一個資源文件,這樣才能進行對數(shù)據(jù)的更新和創(chuàng)建操作。
    • POST 能對整個資源集合進行操作,如果沒有指定具體修改的文件 id,那么 POST 指令會自動生成一個唯一的 id 進行文件的創(chuàng)建,并將數(shù)據(jù)寫入該文件中。如果指定了文件 id,那么就會根據(jù)填寫的參數(shù)對數(shù)據(jù)進行創(chuàng)建和更新操作。
    • PUT、GET、DELETE 是冪等的,由于同一條這樣的指令,執(zhí)行多次結(jié)果都一樣。比如 PUT /uri/xxx 多次,那么結(jié)果和這條指令執(zhí)行一次效果一樣。
    • 而 POST 是非冪等的,執(zhí)行多次更改多次服務(wù)器狀態(tài)。比如 POST /uri 多次,那么生成多個 UUID 的 document,執(zhí)行多次效果和執(zhí)行一次不一樣。

3.ES API 操作

3.1 創(chuàng)建索引

ES 的索引是一個邏輯概念,它包括了分詞列表及文檔列表。同一個索引中存儲了相同類型的文檔,它就相當(dāng)于 MySQL 中的表,或相當(dāng)于 Mongodb 中的集合。

關(guān)于 索引 這個語:

  • 索引(名詞):ES 是基于 Lucene 構(gòu)建的一個搜索服務(wù),它要從索引庫搜索符合條件索引數(shù)據(jù)。
  • 索引(動詞):索引庫剛創(chuàng)建起來是空的,將數(shù)據(jù)添加到索引庫的過程稱為索引。

創(chuàng)建索引命令:PUT http://node01:9200/索引名稱?pretty

上面命令最后有個 pretty,什么意思呢,在任意的查詢字符串中增加 pretty 參數(shù),會讓 Elasticsearch 美化輸出(pretty-print)JSON 響應(yīng)以便更加容易閱讀。

創(chuàng)建索引舉例:

打開 Kibana,找到 dev tools

【Elasticsearch】Elasticsearch 從入門到精通(二):基礎(chǔ)使用,# Elasticsearch,elasticsearch,大數(shù)據(jù),搜索引擎
出現(xiàn)如下頁面,左邊是 執(zhí)行區(qū),右邊是結(jié)果 返回區(qū)

【Elasticsearch】Elasticsearch 從入門到精通(二):基礎(chǔ)使用,# Elasticsearch,elasticsearch,大數(shù)據(jù),搜索引擎
左邊框中執(zhí)行以下語句:

curl -XPUT http://node01:9200/blog001/?pretty

上述語句直接粘貼到 Kibana 的 dev tools,如下左邊所示,它會自動幫我們格式化語句,像 curl -X 和地址都自動隱藏了。

【Elasticsearch】Elasticsearch 從入門到精通(二):基礎(chǔ)使用,# Elasticsearch,elasticsearch,大數(shù)據(jù),搜索引擎
上面執(zhí)行的命令并沒有設(shè)置 body 參數(shù),執(zhí)行的就是默認(rèn)參數(shù)。

執(zhí)行如下帶 body 參數(shù)的語句:

curl -XPUT http://node01:9200/blog2/?pretty
{
    "settings":{
        "index":{
            "number_of_shards":1,
            "number_of_replicas":0
        }
    }
}
  • number_of_shards:設(shè)置 分片 的數(shù)量,在集群中通常設(shè)置多個分片,表示一個索引庫將拆分成多片分別存儲不同的結(jié)點,提高了 ES 的處理能力和高可用性,使用單機環(huán)境,這里設(shè)置為 1。
  • number_of_replicas:設(shè)置 副本 的數(shù)量,設(shè)置副本是為了提高 ES 的高可靠性,單機環(huán)境設(shè)置為 0。

【Elasticsearch】Elasticsearch 從入門到精通(二):基礎(chǔ)使用,# Elasticsearch,elasticsearch,大數(shù)據(jù),搜索引擎
創(chuàng)建索引相當(dāng)于關(guān)系數(shù)據(jù)庫中的數(shù)據(jù)庫還是表?

  • 如果相當(dāng)于數(shù)據(jù)庫,就表示一個索引庫可以創(chuàng)建很多不同類型的文檔,這在 ES 中也是允許的。
  • 如果相當(dāng)于表,就表示一個索引庫只能存儲相同類型的文檔,ES 官方建議在一個索引庫中只存儲相同類型的文檔。

3.2 插入文檔

ES 中的文檔相當(dāng)于 MySQL 數(shù)據(jù)庫表中的數(shù)據(jù)。

使用 PUT 將一個文檔添加到 /_doc(文檔類型),并為該文檔分配 ID 1 1 1。URL 路徑顯示為 index/doctype/ID索引 / 文檔類型 / ID)。

curl -XPUT http://node01:9200/blog01/_doc/1?pretty
{"id": "1", "title": "五分鐘學(xué)大數(shù)據(jù)"}

注意:上面說的文檔類型,也叫 映射類型type)。

什么是映射類型?

簡單理解相當(dāng)于關(guān)系數(shù)據(jù)庫的表(不準(zhǔn)確,后面會說),每個索引里都可以有一個或多個映射類型,映射類型是 index 中的一個邏輯數(shù)據(jù)分類,一個映射類型下的文檔(document),都有相同的字段(field)。

ES 6.0 6.0 6.0 之前的版本有映射類型(type)概念,但是官方將在 ES 9.0 9.0 9.0 版本中徹底刪除映射類型。

為什么要移除映射類型?

開始的時候,我們說 “索引index)” 類似于 SQL 數(shù)據(jù)庫中的 “數(shù)據(jù)庫”,將 “類型type)” 等同于 “”。

這是一個糟糕的類比,并且導(dǎo)致了一些錯誤的假設(shè)。在 SQL 數(shù)據(jù)庫中,表之間是相互獨立的。一個表中的各列并不會影響到其它表中的同名的列。而在 映射類型mapping type)中卻不是這樣的。

在同一個 Elasticsearch 索引中,其中不同映射類型中的同名字段在內(nèi)部是由同一個 Lucene 字段來支持的。換句話說,假如有兩個映射類型 usertweetuser 類型中的 user_name 字段與 tweet 類型中的 user_name 字段是完全一樣的,并且兩個 user_name 字段在兩個類型中必須具有相同的映射(定義)。

這會在某些情況下導(dǎo)致一些混亂,比如,在同一個索引中,當(dāng)你想在其中的一個類型中將 deleted 字段作為 date 類型,而在另一個類型中將其作為 boolean 字段。

在此之上需要考慮一點,如果同一個索引中存儲的各個實體如果只有很少或者根本沒有同樣的字段,這種情況會導(dǎo)致稀疏數(shù)據(jù),并且會影響到 Lucene 的高效壓縮數(shù)據(jù)的能力。

基于這些原因,將映射類型的概念從 Elasticsearch 中移除。

所以在 ES 6.0 6.0 6.0 及之后版本中要弱化映射類型的概念,盡量設(shè)置一個無任何業(yè)務(wù)含義的名字,本文檔的所有映射類型都統(tǒng)一設(shè)為 _doc

3.3 查詢文檔

curl -XGET http://node01:9200/blog01/_doc/1?pretty

【Elasticsearch】Elasticsearch 從入門到精通(二):基礎(chǔ)使用,# Elasticsearch,elasticsearch,大數(shù)據(jù),搜索引擎

3.4 更新文檔

curl -XPUT http://node01:9200/blog01/_doc/1?pretty
{"id": "1", "title": "公眾號【五分鐘學(xué)大數(shù)據(jù)】"}

【Elasticsearch】Elasticsearch 從入門到精通(二):基礎(chǔ)使用,# Elasticsearch,elasticsearch,大數(shù)據(jù),搜索引擎

3.5 搜索文檔

GET /blog01/article/_search?q=title:公眾號【五分鐘學(xué)大數(shù)據(jù)】

【Elasticsearch】Elasticsearch 從入門到精通(二):基礎(chǔ)使用,# Elasticsearch,elasticsearch,大數(shù)據(jù),搜索引擎
返回值說明

  • Hits
    • 返回結(jié)果中最重要的部分是 hits,它包含 total 字段來表示匹配到的文檔總數(shù),并且一個 hits 數(shù)組包含所查詢結(jié)果的前十個文檔。
    • hits 數(shù)組中每個結(jié)果包含文檔的 _index、_type、_id,加上 _source 字段。這意味著我們可以直接從返回的搜索結(jié)果中使用整個文檔。這不像其他的搜索引擎,僅僅返回文檔的 ID,需要你單獨去獲取文檔。
    • 每個結(jié)果還有一個 _score,它衡量了文檔與查詢的匹配程度。默認(rèn)情況下,首先返回最相關(guān)的文檔結(jié)果,就是說,返回的文檔是按照 _score 降序排列的。
    • max_score 值是與查詢所匹配文檔的 _score 的最大值。
  • took
    • took 值告訴我們執(zhí)行整個搜索請求耗費了多少毫秒。
  • Shard
    • _shards 部分告訴我們在查詢中參與分片的總數(shù),以及這些分片成功了多少個失敗了多少個。正常情況下我們不希望分片失敗,但是分片失敗是可能發(fā)生的。
    • 如果我們遭遇到一種災(zāi)難級別的故障,在這個故障中丟失了相同分片的原始數(shù)據(jù)和副本,那么對這個分片將沒有可用副本來對搜索請求作出響應(yīng)。假若這樣,Elasticsearch 將報告這個分片是失敗的,但是會繼續(xù)返回剩余分片的結(jié)果。
  • timeout
    • timed_out 值告訴我們查詢是否超時。默認(rèn)情況下,搜索請求不會超時。 如果低響應(yīng)時間比完成結(jié)果更重要,你可以指定 timeout 10 10 10 或者 10 m s 10ms 10ms,或者 1 s 1s 1sGET /_search?timeout=10ms
    • 在請求超時之前,Elasticsearch 將會返回已經(jīng)成功從每個分片獲取的結(jié)果。

3.6 刪除文檔

DELETE /blog01/article/1?pretty

3.7 刪除索引

DELETE /blog01?pretty

3.8 創(chuàng)建映射

在索引中每個文檔都包括了一個或多個字段(field),創(chuàng)建映射就是向索引庫中創(chuàng)建字段及字段類型等的過程,下面是 documentfield 與關(guān)系數(shù)據(jù)庫的概念的類比:

  • 文檔(Document)? Row 記錄
  • 字段(Field) ? Columns 列

為什么要映射?

ES 中的文檔等價于 Java 中的對象,那么在 Java 對象中有字段類型(比如 string、int、long 等),同理在 ES 索引中的具體字段也是有類型的。

像下面這個操作:

PUT /document/_doc/1
{
    "title" : "Elasticsearch 怎么學(xué)",
    "author" : "五分鐘學(xué)大數(shù)據(jù)",
    "titleScore" : 60
}

這種操作并沒有指定字段類型,那么 Elasticsearch 會自動根據(jù)數(shù)據(jù)類型的格式識別字段的類型;

查看索引的字段類型:

GET /document/_mapping

可以發(fā)現(xiàn) titleScore 的類型是 long。

【Elasticsearch】Elasticsearch 從入門到精通(二):基礎(chǔ)使用,# Elasticsearch,elasticsearch,大數(shù)據(jù),搜索引擎
然后在插入一條數(shù)據(jù),注意此時 titleScore 的值不是 long 類型:

PUT /document/_doc/2
{
    "title": "Elasticsearch 怎么學(xué)",
    "author": "五分鐘學(xué)大數(shù)據(jù)",
    "titleScore": 66.666
}

查詢數(shù)據(jù):

GET /document/_doc/2

我們會發(fā)現(xiàn) ES 能存入,并沒有報錯(注意),這其實是一個問題,因為如果后期 Elaticsearch 對接 Java 的時候,我們會寫一個類對數(shù)據(jù)做封裝,比如:

class Article{
    private String title;
    private String author;
    private String titleScore
}

對于 titleScore,設(shè)置什么類型合適?使用 long 類型,那么后面肯定會有數(shù)據(jù)格式轉(zhuǎn)換的異常。

所以,我們?nèi)绻芴崆爸雷侄晤愋?,那么最好使?mapping 的映射管理,提前指定字段的類型,防止后續(xù)的程序問題。

先刪除之前創(chuàng)建的索引:DELETE document

創(chuàng)建索引,并指定映射:

PUT document
{
    "mappings": {
        "properties": {
            "title": {
                "type": "text"
            },
            "author": {
                "type": "text"
            },
            "titleScore": {
                "type": "double"
            }
        }
    }
}

查看索引:GET document/_mapping

【Elasticsearch】Elasticsearch 從入門到精通(二):基礎(chǔ)使用,# Elasticsearch,elasticsearch,大數(shù)據(jù),搜索引擎
對這個索引繼續(xù)添加字段:

POST /document/_mapping
{
    "properties": {
        "number": {
            "type": "text"
        }
    }
}

查看索引:GET document/_mapping

【Elasticsearch】Elasticsearch 從入門到精通(二):基礎(chǔ)使用,# Elasticsearch,elasticsearch,大數(shù)據(jù),搜索引擎

3.9 映射字段的類型

在 Elasticsearch 中,每一個字段都有一個類型(type)。以下為 Elasticsearch 中可以使用的類型:

分類 類型名稱
說明
簡單類型 text 需要進行全文檢索的字段,通常使用 text 類型來對應(yīng)正文、產(chǎn)品描述或者短文等非結(jié)構(gòu)化文本數(shù)據(jù)。分詞器先會將文本進行分詞轉(zhuǎn)換為詞條列表。將來就可以基于詞條來進行檢索了。文本字段不能用戶排序、也很少用戶聚合計算。
簡單類型 keyword 使用 keyword 來對應(yīng)結(jié)構(gòu)化的數(shù)據(jù),如 ID、電子郵件地址、主機名、狀態(tài)代碼、郵政編碼或標(biāo)簽??梢允褂?keyword 來進行排序或聚合計算。注意:keyword 是不能進行分詞的。
簡單類型 date 保存格式化的日期數(shù)據(jù),例如:2015-01-01 或者 2015/01/01 12:10:30。在 Elasticsearch 中,日期都將以字符串方式展示??梢越o date 指定格式:"format":"yyyy-MM-dd HH:mm:ss"。
簡單類型 long / integer / short / byte 64 64 64 位整數(shù) / 32 32 32 位整數(shù) / 16 16 16 位整數(shù) / 8 8 8 位整數(shù)
簡單類型 double / float / half_float 64 64 64 位雙精度浮點 / 32 32 32 位單精度浮點 / 16 16 16 位半精度浮點
簡單類型 boolean true / false
簡單類型 ip IPV4(192.168.1.110)/ IPV6(192.168.0.0/16
JSON 分層嵌套類型 object 用于保存 JSON 對象
JSON 分層嵌套類型 nested 用于保存 JSON 數(shù)組
特殊類型 geo_point 用于保存經(jīng)緯度坐標(biāo)
特殊類型 geo_shape 用于保存地圖上的多邊形坐標(biāo)

3.10 獲取映射字段

語法:GET /{index}/_mapping/field/{field}

GET /document/_mapping/field/number

【Elasticsearch】Elasticsearch 從入門到精通(二):基礎(chǔ)使用,# Elasticsearch,elasticsearch,大數(shù)據(jù),搜索引擎

3.11 索引庫配置管理(settings)

所謂的 settings 就是用來修改索引分片和副本數(shù)的。

比如有的重要索引,副本數(shù)很少甚至沒有副本,那么我們可以通過 setting 來添加副本數(shù)。

查看 settingsGET /document/_settings

【Elasticsearch】Elasticsearch 從入門到精通(二):基礎(chǔ)使用,# Elasticsearch,elasticsearch,大數(shù)據(jù),搜索引擎
可以看到當(dāng)前的副本數(shù)是 1 1 1,那么為了提高容錯性,我們可以把副本數(shù)改成 2 2 2

PUT /document/_settings
{
    "number_of_replicas": 2
}

【Elasticsearch】Elasticsearch 從入門到精通(二):基礎(chǔ)使用,# Elasticsearch,elasticsearch,大數(shù)據(jù),搜索引擎
注意:副本可以改,分片不能改!

執(zhí)行如下語句會報錯:

PUT /document/_settings
{
    "number_of_shards": 3
}

4.ES 花式查詢

我們先插入一些數(shù)據(jù),后面查詢時以這些數(shù)據(jù)為例。

在 Kibana 界面上執(zhí)行如下語句,插入一些數(shù)據(jù):

POST /student/_doc/_bulk
{ "index": { "_id": 1 }}
{ "name" : "liubei", "age" : 20 , "sex": "boy", "birth": "1996-01-02" , "about": "i like diaocan he girl" }
{ "index": { "_id": 2 }}
{ "name" : "guanyu", "age" : 21 , "sex": "boy", "birth": "1995-01-02" , "about": "i like diaocan" }
{ "index": { "_id": 3 }}
{ "name" : "zhangfei", "age" : 18 , "sex": "boy", "birth": "1998-01-02" , "about": "i like travel" }
{ "index": { "_id": 4 }}
{ "name" : "diaocan", "age" : 20 , "sex": "girl", "birth": "1996-01-02" , "about": "i like travel and sport" }
{ "index": { "_id": 5 }}
{ "name" : "panjinlian", "age" : 25 , "sex": "girl", "birth": "1991-01-02" , "about": "i like travel and wusong" }
{ "index": { "_id": 6 }}
{ "name" : "caocao", "age" : 30 , "sex": "boy", "birth": "1988-01-02" , "about": "i like xiaoqiao" }
{ "index": { "_id": 7 }}
{ "name" : "zhaoyun", "age" : 31 , "sex": "boy", "birth": "1997-01-02" , "about": "i like travel and music" }
{ "index": { "_id": 8 }}
{ "name" : "xiaoqiao", "age" : 18 , "sex": "girl", "birth": "1998-01-02" , "about": "i like caocao" }
{ "index": { "_id": 9 }}
{ "name" : "daqiao", "age" : 20 , "sex": "girl", "birth": "1996-01-02" , "about": "i like travel and history" }

4.1 使用 match_all 做查詢

GET /student/_doc/_search?pretty
{
    "query": {
        "match_all": {}
    }
}

問題:通過 match_all 匹配后,會把所有的數(shù)據(jù)檢索出來,但是往往真正的業(yè)務(wù)需求并非要找全部的數(shù)據(jù),而是檢索出自己想要的;并且對于 ES 集群來說,直接檢索全部的數(shù)據(jù),很容易造成 GC 現(xiàn)象。所以,我們要學(xué)會如何進行高效的檢索數(shù)據(jù)。

4.2 通過關(guān)鍵字段進行查詢

GET /student/_doc/_search?pretty
{
    "query": {
        "match": {
            "about": "travel"
        }
    }
}

如果此時想查詢喜歡旅游的,并且不能是男孩的,怎么辦?

這樣寫是否可以:

GET /student/_doc/_search?pretty
{
    "query": {
        "match": {
            "about": "travel",
            "sex": "girl"
        }
    }
}

【Elasticsearch】Elasticsearch 從入門到精通(二):基礎(chǔ)使用,# Elasticsearch,elasticsearch,大數(shù)據(jù),搜索引擎
發(fā)現(xiàn)報錯了,因為一個 match 下,不能出現(xiàn)多個字段值,需要使用復(fù)合查詢。

4.3 bool 的復(fù)合查詢

當(dāng)出現(xiàn)多個查詢語句組合的時候,可以用 bool 來包含。

bool 合并聚包含:must,must_not 或者 shouldshould 表示 or 的意思。

例:查詢非男性中喜歡旅行的人

GET /student/_doc/_search?pretty
{
    "query": {
        "bool": {
            "must": {
                "match": {
                    "about": "travel"
                }
            },
            "must_not": {
                "match": {
                    "sex": "boy"
                }
            }
        }
    }
}

4.4 bool 的復(fù)合查詢中的 should

should 表示可有可無的(如果 should 匹配到了就展示,否則就不展示)

例:查詢喜歡旅行的,如果有男性的則顯示,否則不顯示

GET /student/_doc/_search?pretty
{
    "query": {
        "bool": {
            "must": {
                "match": {
                    "about": "travel"
                }
            },
            "should": {
                "match": {
                    "sex": "boy"
                }
            }
        }
    }
}

4.5 term 匹配

使用 term 進行精確匹配(比如數(shù)字,日期,布爾值或 not_analyzed 的字符串(未經(jīng)分析的文本數(shù)據(jù)類型))。

語法:

{ "term": { "age": 20 }}
{ "term": { "date": "2018-04-01" }}
{ "term": { "sex": “boy” }}
{ "term": { "about": "trivel" }}

例如:

GET /student/_doc/_search?pretty
{
    "query": {
        "bool": {
            "must": {
                "term": {
                    "about": "travel"
                }
            },
            "should": {
                "term": {
                    "sex": "boy"
                }
            }
        }
    }
}

4.6 使用 terms 匹配多個值

GET /student/_doc/_search?pretty
{
    "query": {
        "bool": {
            "must": {
                "terms": {
                    "about": [
                        "travel",
                        "history"
                    ]
                }
            }
        }
    }
}

注意:termmatch 區(qū)別:

  • term 主要是用于精確的過濾比如說:“我愛你”
  • match 下面匹配可以為包含:我、愛、你、我愛等等的解析器
  • term 語法下面就精準(zhǔn)匹配到:“我愛你”

4.7 range 過濾

Range 過濾允許我們按照指定的范圍查找一些數(shù)據(jù):

  • gt:大于
  • gae:大于等于
  • lt:小于
  • lte:小于等于

例:查找出大于 20 20 20 歲,小于等于 25 25 25 歲的學(xué)生

GET /student/_doc/_search?pretty
{
    "query": {
        "range": {
            "age": {
                "gt": 20,
                "lte": 25
            }
        }
    }
}

4.8 exists 和 missing 過濾

existsmissing 過濾可以找到文檔中是否包含某個字段或者是沒有某個字段。

例:查找字段中包含 age 的文檔

GET /student/_doc/_search?pretty
{
    "query": {
        "exists": {
            "field": "age"
        }
    }
}

4.9 bool 的多條件過濾

bool 也可以像之前 match 一樣來過濾多行條件:

  • must:多個查詢條件的完全匹配,相當(dāng)于 and。
  • must_not:多個查詢條件的相反匹配,相當(dāng)于 not。
  • should:至少有一個查詢條件匹配,相當(dāng)于 or。

例:過濾出 about 字段包含 travel 并且年齡大于 20 20 20 歲小于 30 30 30 歲的同學(xué)

GET /student/_doc/_search?pretty
{
    "query": {
        "bool": {
            "must": [
                {
                    "term": {
                        "about": {
                            "value": "travel"
                        }
                    }
                },
                {
                    "range": {
                        "age": {
                            "gte": 20,
                            "lte": 30
                        }
                    }
                }
            ]
        }
    }
}

4.10 查詢與過濾條件合并

通常復(fù)雜的查詢語句,我們也要配合過濾語句來實現(xiàn)緩存,用 filter 語句就可以來實現(xiàn)。

例:查詢出喜歡旅行的,并且年齡是 20 20 20 歲的文檔

GET /student/_doc/_search?pretty
{
    "query": {
        "bool": {
            "must": {
                "match": {
                    "about": "travel"
                }
            },
            "filter": [
                {
                    "term": {
                        "age": 20
                    }
                }
            ]
        }
    }
}

5.零停機重新索引數(shù)據(jù)

實際生產(chǎn),對于文檔的操作,偶爾會遇到這種問題:

某一個字段的類型不符合后期的業(yè)務(wù)了,但是當(dāng)前的索引已經(jīng)創(chuàng)建了,我們知道 ES 在字段的 mapping 建立后就不可再次修改 mapping 的值。

5.1 新建索引庫 articles1

PUT articles1
{
    "settings": {
        "number_of_shards": 3,
        "number_of_replicas": 1
    },
    "mappings": {
        "dynamic": "strict",
        "properties": {
            "id": {
                "type": "text",
                "store": true
            },
            "title": {
                "type": "text",
                "store": true
            },
            "readCounts": {
                "type": "integer",
                "store": true
            },
            "times": {
                "type": "text",
                "index": false
            }
        }
    }
}

5.2 索引庫 articles1 添加數(shù)據(jù)

PUT articles1/_doc/1
{
    "id": "1",
    "title": "世界1",
    "readCounts": 2,
    "times": "2022-05-01"
}

5.3 新建索引庫 articles2

PUT articles2
{
    "settings": {
        "number_of_shards": 5,
        "number_of_replicas": 1
    },
    "mappings": {
        "dynamic": "strict",
        "properties": {
            "id": {
                "type": "text",
                "store": true
            },
            "title": {
                "type": "text",
                "store": true
            },
            "readCounts": {
                "type": "integer",
                "store": true
            },
            "times": {
                "type": "date",
                "index": false
            }
        }
    }
}

5.4 拷貝數(shù)據(jù)并驗證

POST _reindex
{
    "source": {
        "index": "articles1"
    },
    "dest": {
        "index": "articles2"
    }
}

驗證數(shù)據(jù):

GET articles2/_doc/1

【Elasticsearch】Elasticsearch 從入門到精通(二):基礎(chǔ)使用,# Elasticsearch,elasticsearch,大數(shù)據(jù),搜索引擎文章來源地址http://www.zghlxwxcb.cn/news/detail-857742.html

到了這里,關(guān)于【Elasticsearch】Elasticsearch 從入門到精通(二):基礎(chǔ)使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Elasticsearch 7.8.0從入門到精通

    Elasticsearch 7.8.0從入門到精通

    官網(wǎng):Elasticsearch 7.8.0 | Elastic 大家下載所需要的安裝包即可。然后解壓縮: Elasticsearch是通過java編寫的,所以自帶jdk。多好,下載Elasticsearch贈送jdk? 0.0,不過一般我們用自己的jdk。 要啟動Elasticsearch服務(wù),就直接進入bin目錄,并打開elasticsearch.bat文件。 這樣就啟動好了。 注意

    2024年02月02日
    瀏覽(39)
  • Elasticsearch從入門到精通-03基本語法學(xué)習(xí)

    Elasticsearch從入門到精通-03基本語法學(xué)習(xí)

    ??作者簡介:大家好,我是程序員行走的魚 ?? 本篇主要介紹和大家一塊學(xué)習(xí)一下ES基本語法,主要包括索引管理、文檔管理、映射管理等內(nèi)容 ES對數(shù)據(jù)進行增、刪、改、查是以Restful方式對服務(wù)端發(fā)送請求的,所以在我們學(xué)習(xí)基本語法之前先了解一下Restful是什么? REST 指的是一

    2024年03月15日
    瀏覽(25)
  • Elasticsearch從入門到精通-05ES匹配查詢

    Elasticsearch從入門到精通-05ES匹配查詢

    ??作者簡介:大家好,我是程序員行走的魚 ?? 本篇主要介紹和大家一塊學(xué)習(xí)一下ES各種場景下的匹配查詢,有助于我們在項目中進行綜合使用 創(chuàng)建索引并指定ik分詞器: 添加數(shù)據(jù): 需要搜索的document中的remark字段包含java和developer詞組 上述語法中,如果將operator的值改為or。則與

    2024年03月27日
    瀏覽(30)
  • 使用阿里云試用Elasticsearch學(xué)習(xí):1.7 基礎(chǔ)入門——索引管理

    我們已經(jīng)看到 Elasticsearch 讓開發(fā)一個新的應(yīng)用變得簡單,不需要任何預(yù)先計劃或設(shè)置。 不過,要不了多久你就會開始想要優(yōu)化索引和搜索過程,以便更好地適合您的特定用例。 這些定制幾乎圍繞著索引和類型的方方面面,在本章,我們將介紹管理索引和類型映射的 API 以及一

    2024年04月12日
    瀏覽(22)
  • 使用阿里云試用Elasticsearch學(xué)習(xí):1.5 基礎(chǔ)入門——請求體查詢

    簡易 查詢 —query-string search— 對于用命令行進行即席查詢(ad-hoc)是非常有用的。然而,為了充分利用查詢的強大功能,你應(yīng)該使用 請求體 search API, 之所以稱之為請求體查詢(Full-Body Search),因為大部分參數(shù)是通過 Http 請求體而非查詢字符串來傳遞的。 請求體查詢 —下文簡

    2024年04月10日
    瀏覽(16)
  • 使用阿里云試用Elasticsearch學(xué)習(xí):1.3 基礎(chǔ)入門——搜索-最基本的工具

    現(xiàn)在,我們已經(jīng)學(xué)會了如何使用 Elasticsearch 作為一個簡單的 NoSQL 風(fēng)格的分布式文檔存儲系統(tǒng)。我們可以將一個 JSON 文檔扔到 Elasticsearch 里,然后根據(jù) ID 檢索。但 Elasticsearch 真正強大之處在于可以從無規(guī)律的數(shù)據(jù)中找出有意義的信息——從“大數(shù)據(jù)”到“大信息”。 Elasticse

    2024年04月12日
    瀏覽(17)
  • Java ElasticSearch-Linux面試題,快速從入門到精通

    Java ElasticSearch-Linux面試題,快速從入門到精通

    先自我介紹一下,小編浙江大學(xué)畢業(yè),去過華為、字節(jié)跳動等大廠,目前阿里P7 深知大多數(shù)程序員,想要提升技能,往往是自己摸索成長,但自己不成體系的自學(xué)效果低效又漫長,而且極易碰到天花板技術(shù)停滯不前! 因此收集整理了一份《2024年最新Linux運維全套學(xué)習(xí)資料》,

    2024年04月25日
    瀏覽(25)
  • 【100天精通python】Day30:使用python操作數(shù)據(jù)庫_數(shù)據(jù)庫基礎(chǔ)入門

    【100天精通python】Day30:使用python操作數(shù)據(jù)庫_數(shù)據(jù)庫基礎(chǔ)入門

    ?專欄導(dǎo)讀? 專欄訂閱地址: https://blog.csdn.net/qq_35831906/category_12375510.html 1.1 什么是數(shù)據(jù)庫? ????????數(shù)據(jù)庫是一個結(jié)構(gòu)化存儲和組織數(shù)據(jù)的集合,它可以被有效地訪問、管理和更新。數(shù)據(jù)庫的目的是為了提供一種可靠的方式來存儲和管理大量的數(shù)據(jù),以便用戶和應(yīng)用程序

    2024年02月13日
    瀏覽(35)
  • elasticsearch基礎(chǔ)入門

    elasticsearch簡稱es是一個基于lucene開源的近實時的搜索引擎。es是restful風(fēng)格基于http協(xié)議。 1.近實時性 數(shù)據(jù)插入后1s可以查詢到 es基于luncene也有著luncene中段的概念。es的分片由很多個段(segment)組成,向es寫數(shù)據(jù)是寫到段上,段每隔1s刷到緩存和磁盤才能被我們讀取到所以es是近

    2024年01月23日
    瀏覽(16)
  • ElasticSearch基礎(chǔ)入門,白話es

    ElasticSearch基礎(chǔ)入門,白話es

    ElasticSearch是一個搜索服務(wù)器。以下簡稱es 作用: 進行搜索 那么 問題來了,mysql不是也能搜索嗎,為何要用es? 小數(shù)據(jù)量下,Mysql是完全可以勝任的,可以完成搜索,此時可以不用es;但是在 大數(shù)據(jù)量(百萬千萬甚至上億) 的前提下,會有以下幾個問題: 性能低:使用模糊查

    2023年04月08日
    瀏覽(13)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包