精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一篇帶你ES入門

原創(chuàng) 精選
存儲(chǔ) 數(shù)據(jù)管理
Elasticsearch 是一個(gè)分布式的 RESTful 搜索和分析引擎,可用來(lái)集中存儲(chǔ)您的數(shù)據(jù),以便您對(duì)形形色色、規(guī)模不一的數(shù)據(jù)進(jìn)行搜索、索引和分析。

作者 | 蔡柱梁

審校 | 重樓

目錄

  1. ES是什么
  2. 倒排索引
  3. 使用ES必須知道的基本概念
  4. 了解常用的DSL

1 ES是什么

Elasticsearch 是一個(gè)分布式的 RESTful 搜索和分析引擎,可用來(lái)集中存儲(chǔ)您的數(shù)據(jù),以便您對(duì)形形色色、規(guī)模不一的數(shù)據(jù)進(jìn)行搜索、索引和分析。

上面是??官網(wǎng)-API文檔??對(duì)的定位描述。ES 是一個(gè)分布式的搜索引擎,數(shù)據(jù)存儲(chǔ)形式與我們常用的 MySQL 的存儲(chǔ)形式 — rows 不同,ES 會(huì)將數(shù)據(jù)以 JSON 結(jié)構(gòu)存儲(chǔ)到一個(gè)文檔。一個(gè)文檔寫入 ES 后,我們可以在 1 秒左右查詢到它,因此我們稱 ES 在分布式中數(shù)據(jù)查詢是準(zhǔn)實(shí)時(shí)的。

提問(wèn):那么這種將一行行數(shù)據(jù)變成

我們傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)一般的存儲(chǔ)形式是數(shù)據(jù)結(jié)構(gòu)不固定,長(zhǎng)度不固定。這時(shí)如果用關(guān)系型數(shù)據(jù)庫(kù)做存儲(chǔ),那么我們表設(shè)計(jì)上,只能用一個(gè)

為了可以適應(yīng)高并發(fā),又能快速檢索、分析數(shù)據(jù)的搜索分析引擎,像倒排索引實(shí)現(xiàn)可以通過(guò)詞條快速查找文檔的,而倒排索引的實(shí)現(xiàn)與這種文檔存儲(chǔ)數(shù)據(jù)的方式密不可分。

ES 的適用場(chǎng)景所具有的特點(diǎn):

  • 海量數(shù)據(jù)的搜索服務(wù)
  • 對(duì)實(shí)時(shí)性要求較高
  • 對(duì)事務(wù)要求不高

2 倒排索引

倒排索引是文檔檢索系統(tǒng)中最常用的數(shù)據(jù)結(jié)構(gòu)。

說(shuō)到幫助搜索引擎檢索數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),我們最熟悉的應(yīng)該就是倒排索引了。過(guò)去很多人喜歡用字典來(lái)舉例,因?yàn)樗脑砗臀覀兪褂弥形淖值洳檎覞h字是相似的。

ES 會(huì)在我們保存一份文檔的時(shí)候,將文檔根據(jù)指定分詞器進(jìn)行分詞,然后維護(hù)關(guān)鍵詞和文檔的關(guān)系——倒排索引。后面我們通過(guò)一些詞條進(jìn)行檢索的時(shí)候,就可以通過(guò)這個(gè)索引找到對(duì)應(yīng)相關(guān)的文檔。

2.1 例子

下面舉個(gè)例子。

插入兩份文檔,內(nèi)容如下:

  1. we like java java java
  2. we like lucene lucene lucene

建立倒排索引大體流程如下:

  1. 首先對(duì)所有數(shù)據(jù)的內(nèi)容進(jìn)行拆分,拆分成唯一的一個(gè)個(gè)詞語(yǔ)(詞條)
  2. 然后建立詞條和對(duì)應(yīng)文檔的對(duì)應(yīng)關(guān)系,具體如下:

詞條?

(文檔ID,頻率)?

詞條在文檔中的位置?

we

(1,1) (2,1)

(0) (0)

like

(1,1) (2,1)

(1) (1)

java

(1,3)

(2,3,4)

lucene

(2,3)

(2,3,4)

注意:這里用表格來(lái)展示是為了方便理解,但是倒排索引其實(shí)是樹結(jié)構(gòu)。

那這時(shí)我檢索詞條:

3 使用ES必須知道的基本概念

這里的概念是我們?cè)谑褂眠^(guò)程中絕對(duì)無(wú)法繞開的概念,所以我們需要知道,否則無(wú)法和同事交流,哪怕僅僅是使用級(jí)別。

3.1 document(文檔)

在 ES 中,一份文檔相當(dāng)于 MySQL 中的一行記錄,數(shù)據(jù)以 JSON 格式保存。文檔被更新時(shí),版本號(hào)會(huì)被增加。

3.2 Index(索引)

存儲(chǔ)文檔的地方,類似 MySQL 中的表。

3.3 Mapping(映射)

映射是定義一個(gè)文件和它所包含的字段如何被存儲(chǔ)和索引的過(guò)程(??這是官方定義??)。

文檔里面有許多字段,這些字段有自己的類型,采用什么分詞器等等,我們可以通過(guò)。

3.4 type(類型)

這是比較老舊版本會(huì)用到的定義,在 ES5 的時(shí)代,它可以對(duì) Index 做更精細(xì)地劃分,那個(gè)時(shí)代的 Index 更像 MySQL 的實(shí)例,而 type 類似 MySQL 的 table。

ES 5.x 中一個(gè)index可以有多種type。

ES 6.x 中一個(gè)index只能有一種type。

ES 7.x 以后,將逐步移除type這個(gè)概念,現(xiàn)在的操作已經(jīng)不再使用,默認(rèn)_doc。

4 了解常用的DSL

在 MySQL 中,我們經(jīng)常使用 SQL 通過(guò)客戶端操作 MySQL,而 DSL 正是我們通過(guò)客戶端發(fā)送給 ES 的操作指令。

下面只寫一些現(xiàn)在我們常常接觸的簡(jiǎn)單的 DSL,更多的請(qǐng)看 官網(wǎng)。

4.1 Index

官網(wǎng)API:??https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-index_.html??

4.1.1 創(chuàng)建索引

可以先建索引,再設(shè)置 mapping,也可以直接一次完成。

一次建好

PUT goods{
"mappings": {
"properties": {
"brand": {
"type": "keyword"
},
"category": {
"type": "keyword"
},
"num": {
"type": "integer"
},
"price": {
"type": "double"
},
"title": {
"type": "text",
"analyzer": "ik_smart"
},
"id": {
"type": "long"
}
}
}
}

4.1.2 查詢 index 信息

GET index_name

4.1.3 刪除 index

DELETE index_name

4.1.4 關(guān)閉 index

POST index_name/_close

當(dāng)索引進(jìn)入關(guān)閉狀態(tài),是不能操作文檔的。

4.1.5 打開 index

POST index_name/_open

4.1.6 Aliases(別名) & Reindex

實(shí)際工作中,有很多情況可能都會(huì)需要重建 index,同時(shí)將舊的數(shù)據(jù)遷移到新 index 上,并且期望這個(gè)過(guò)程可以零停機(jī),那么這時(shí)我們就可以用到 aliases 和 reindex 了。

事實(shí)上,我們程序訪問(wèn) index,很少是訪問(wèn)真正的 indexName,一般我們會(huì)對(duì) index 建別名,程序訪問(wèn)的是別名。因?yàn)槿绻褂脛e名,那么此別名背后的索引需要進(jìn)行更換的時(shí)候?qū)Τ绦蚩梢宰龅綗o(wú)感知。

下面是一個(gè)需要添加分詞器而導(dǎo)致需要重建 index 和數(shù)據(jù)遷移的場(chǎng)景(這里只是舉個(gè)簡(jiǎn)單場(chǎng)景,方便感受這些命令如何使用而已)。

1)先建立了一個(gè) person,具體如下:

PUT person
{
"mappings" : {
"properties" : {
"address" : {
"type" : "text"
},
"age" : {
"type" : "integer"
},
"name" : {
"type" : "keyword"
}
}
}
}

2)后端程序訪問(wèn)是用別名

POST _aliases
{
"actions": [
{
"add": {
"index": "person",
"alias": "person_index"
}
}
]
}

3)添加了一些數(shù)據(jù)

PUT person/_doc/1
{
"name": "test1",
"age": 18,
"address": "test address"
}

4)添加分詞器,更改 mapping 設(shè)置

PUT person2
{
"mappings" : {
"properties" : {
"address" : {
"type" : "text",
"analyzer": "ik_smart"
},
"age" : {
"type" : "integer"
},
"name" : {
"type" : "keyword"
}
}
}
}

5)別名操作(支持多個(gè)操作,并具有原子性)

POST /_aliases
{
"actions" : [
# 添加別名
{ "add" : { "index" : "person2", "alias" : "person_index" } }
]
}

這時(shí)我們后端程序只能對(duì) person_index 進(jìn)行讀操作,無(wú)法進(jìn)行寫操作。

6)將 person 中的數(shù)據(jù)導(dǎo)入到 person2 中(如果是不同進(jìn)程,支持遠(yuǎn)程訪問(wèn))

POST _reindex
{
"source": {
"index": "person"
},
"dest": {
"index": "person2"
}
}

7)去掉 person

POST /_aliases
{
"actions" : [
# person 從別名 person_index 中移除
{ "remove" : { "index" : "person", "alias" : "person_index" } }
]
}

這時(shí)后端程序?qū)?person_index 的讀寫操作均恢復(fù)正常。

更多信息可以查閱官網(wǎng):??reindex??? ??aliases??

4.2 設(shè)置 Mapping

添加 index。

PUT person
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1
}
}

已經(jīng)建好索引 person,但是沒有設(shè)置 mapping,現(xiàn)在設(shè)置。

PUT person/_mapping
{
"properties": {
"name": {
"type": "keyword"
},
"age": {
"type": "integer"
},
"address":{
"type": "text",
"analyzer": "ik_max_word"
}
}
}

index 確定后,不能修改已有字段,只能添加,以下增加一個(gè) test字段作為例子。

PUT person/_mapping
{
"properties": {
"test": {
"type": "text"
}
}
}

查詢 mapping 信息

GET person/_mapping

4.3 使用頻率較高的查詢

這里只寫一些比較常接觸的語(yǔ)句,不過(guò)像 wildcard 這種,也有很多公司是禁止使用的,所以用的時(shí)候一定要了解公司規(guī)范要求。

先設(shè)置一個(gè)商品 index,具體如下:

PUT goods
{
"mappings": {
"properties": {
"brand": {
"type": "keyword"
},
"category": {
"type": "keyword"
},
"num": {
"type": "integer"
},
"price": {
"type": "double"
},
"title": {
"type": "text",
"analyzer": "ik_smart"
},
"id": {
"type": "long"
}
}
}
}

字段說(shuō)明:

  1. title:商品標(biāo)題
  2. price:商品價(jià)格
  3. num:商品庫(kù)存
  4. category:商品類別
  5. brand:品牌名稱

4.3.1 分頁(yè)與排序

# GET 索引庫(kù)名稱/_search,默認(rèn)展示10條數(shù)據(jù)
GET goods/_doc/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"price": {
"order": "desc" # 根據(jù)價(jià)格降序排序
}
}
],
"from": 0, # 從哪一條開始
"size": 20 # 顯示多少條
}

4.3.1.1 深度翻頁(yè)

ES 深度分頁(yè)存在的問(wèn)題:

  1. 性能問(wèn)題
  1. 深度分頁(yè)會(huì)導(dǎo)致搜索引擎遍歷大量的數(shù)據(jù),因此會(huì)對(duì)性能產(chǎn)生負(fù)面影響。尤其是在數(shù)據(jù)量龐大的情況下,可能會(huì)導(dǎo)致搜索請(qǐng)求變得非常慢。
  1. 排序問(wèn)題
  1. 這是由于不同分片上的數(shù)據(jù)排序不一致所導(dǎo)致的(每個(gè)分片需要將自己的處理結(jié)果給到協(xié)調(diào)節(jié)點(diǎn),再由協(xié)調(diào)節(jié)點(diǎn)來(lái)計(jì)算出最后的結(jié)果)。
  1. 索引更新問(wèn)題
  1. 如果在進(jìn)行深度分頁(yè)時(shí),索引被更新了,那么可能會(huì)導(dǎo)致部分?jǐn)?shù)據(jù)被遺漏或重復(fù)顯示(為了避免這個(gè)問(wèn)題,可以使用游標(biāo)或滾動(dòng)搜索等機(jī)制來(lái)遍歷數(shù)據(jù))。
  1. 內(nèi)存問(wèn)題
  1. 在進(jìn)行深度分頁(yè)時(shí),Elasticsearch 需要將所有的搜索結(jié)果都存儲(chǔ)在內(nèi)存中。如果結(jié)果集非常大,那么會(huì)占用大量的內(nèi)存,甚至可能導(dǎo)致內(nèi)存溢出(為了避免這個(gè)問(wèn)題,可以使用游標(biāo)或滾動(dòng)搜索等機(jī)制來(lái)逐步處理數(shù)據(jù))。

在 Elasticsearch 7.0 之前,我們是采用 scroll 來(lái)解決深度分頁(yè)的,但是到了 Elasticsearch 7.0 就開始不再推薦采用 scroll 了,推薦采用 search_after。

4.3.1.1.1 scroll

詳細(xì)請(qǐng)看??官方文檔??

以下例子來(lái)自于官網(wǎng)

1)先查詢并生成快照

scroll=1m 是保留1分鐘快照的意思,即是符合當(dāng)前查詢條件的數(shù)據(jù)的結(jié)果集合保留快照1分鐘

POST /index_name/_search?scroll=1m
{
"size": 100,
"query": {
"match": {
"message": "foo"
}
}
}

假設(shè)返回的 scroll_id 是 DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAAD4WYm9laVYtZndUQlNsdDcwakFMNjU1QQ==

2)那么,我們就可以使用這個(gè) ID 進(jìn)行滾動(dòng)翻頁(yè)了

POST /_search/scroll 
{
"scroll" : "1m", # 快照保持1分鐘,重新計(jì)時(shí)
"scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAAD4WYm9laVYtZndUQlNsdDcwakFMNjU1QQ=="
}

3)查詢完后,記得刪除游標(biāo)

DELETE /_search/scroll
{
"scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAAD4WYm9laVYtZndUQlNsdDcwakFMNjU1QQ=="
}

這里詳細(xì)說(shuō)下游標(biāo)的工作方式:

當(dāng)?shù)谝淮伟l(fā)起 scroll 請(qǐng)求時(shí),ES 會(huì)創(chuàng)建一個(gè)包含搜索結(jié)果的快照,并返回一個(gè)唯一的滾動(dòng) ID。在接下來(lái)的每個(gè) scroll 請(qǐng)求中,都需要帶上這個(gè)滾動(dòng) ID,表示要獲取與該搜索上下文匹配的下一批結(jié)果。因?yàn)槊總€(gè) scroll 請(qǐng)求都使用了相同的搜索上下文,所以每個(gè)請(qǐng)求返回的結(jié)果都是相同的,只是可能包含不同的文檔。如果 scroll 請(qǐng)求返回的結(jié)果集合大小不足以填滿請(qǐng)求的大小限制,則 ES 會(huì)在后臺(tái)繼續(xù)搜索,并將結(jié)果添加到當(dāng)前結(jié)果集中,直到結(jié)果集合大小達(dá)到請(qǐng)求的大小限制或搜索完成為止。

由于 scroll 機(jī)制的實(shí)現(xiàn)方式,每次請(qǐng)求返回的結(jié)果可以是任意大小,可以避免一次性讀取所有結(jié)果可能導(dǎo)致的內(nèi)存問(wèn)題。同時(shí),由于滾動(dòng) ID 只在指定的時(shí)間段內(nèi)有效,所以可以在不消耗過(guò)多內(nèi)存的情況下,分批次處理大量數(shù)據(jù)。但是,需要注意的是,如果時(shí)間段設(shè)置得過(guò)短,可能會(huì)導(dǎo)致滾動(dòng) ID 過(guò)期,需要重新發(fā)起搜索請(qǐng)求。

4.3.1.1.2 search_after

詳細(xì)請(qǐng)看??官網(wǎng)??

以下例子來(lái)自于官網(wǎng)

1)先查詢

GET twitter/_search
{
"query": {
"match": {
"title": "elasticsearch"
}
},
"sort": [
{"date": "asc"},
{"tie_breaker_id": "asc"}
]
}

假設(shè)響應(yīng)如下:

{
"took" : 17,
"timed_out" : false,
"_shards" : ...,
"hits" : {
"total" : ...,
"max_score" : null,
"hits" : [
...
{
"_index" : "twitter",
"_id" : "654322",
"_score" : null,
"_source" : ...,
"sort" : [
1463538855,
"654322"
]
},
{
"_index" : "twitter",
"_id" : "654323",
"_score" : null,
"_source" : ...,
"sort" : [
1463538857,
"654323"
]
}
]
}
}

2)接著,使用上面響應(yīng)結(jié)果中最后一個(gè)文檔的排序鍵

作為參數(shù)傳遞到下一次查詢中(這里其實(shí)就是對(duì)應(yīng)了查詢示例中的兩個(gè)排序字段 date 和 tie_breaker_id)

GET twitter/_search
{
"query": {
"match": {
"title": "elasticsearch"
}
},
"search_after": [1463538857, "654323"],
"sort": [
{"date": "asc"},
{"tie_breaker_id": "asc"}
]
}

這里有一個(gè)問(wèn)題,如果我在第2頁(yè)準(zhǔn)備翻到第3頁(yè)時(shí),refresh 了可能會(huì)打亂排序,那么這個(gè)分頁(yè)的結(jié)果就不對(duì)了。為了避免這種情況,我們可以使用 PIT 來(lái)保存當(dāng)前搜索的索引狀態(tài)。

具體使用如下:

1)先得到 PIT ID

POST /index_name/_pit?keep_alive=1m

響應(yīng)如下:

{
"id": "46ToAwMDaWR5BXV1aWQyKwZub2RlXzMAAAAAAAAAACoBYwADaWR4BXV1aWQxAgZub2RlXzEAAAAAAAAAAAEBYQADaWR5BXV1aWQyKgZub2RlXzIAAAAAAAAAAAwBYgACBXV1aWQyAAAFdXVpZDEAAQltYXRjaF9hbGw_gAAAAA=="
}

2)使用 PIT ID 搜索

GET /_search
{
"size": 10000,
"query": {
"match" : {
"user.id" : "elkbee"
}
},
"pit": {
"id": "46ToAwMDaWR5BXV1aWQyKwZub2RlXzMAAAAAAAAAACoBYwADaWR4BXV1aWQxAgZub2RlXzEAAAAAAAAAAAEBYQADaWR5BXV1aWQyKgZub2RlXzIAAAAAAAAAAAwBYgACBXV1aWQyAAAFdXVpZDEAAQltYXRjaF9hbGw_gAAAAA==",
"keep_alive": "1m"
},
"sort": [
{"@timestamp": {"order": "asc", "format": "strict_date_optional_time_nanos", "numeric_type" : "date_nanos" }}
]
}

響應(yīng)如下:

{
"pit_id" : "46ToAwMDaWR5BXV1aWQyKwZub2RlXzMAAAAAAAAAACoBYwADaWR4BXV1aWQxAgZub2RlXzEAAAAAAAAAAAEBYQADaWR5BXV1aWQyKgZub2RlXzIAAAAAAAAAAAwBYgACBXV1aWQyAAAFdXVpZDEAAQltYXRjaF9hbGw_gAAAAA==",
"took" : 17,
"timed_out" : false,
"_shards" : ...,
"hits" : {
"total" : ...,
"max_score" : null,
"hits" : [
...
{
"_index" : "my-index-000001",
"_id" : "FaslK3QBySSL_rrj9zM5",
"_score" : null,
"_source" : ...,
"sort" : [
"2021-05-20T05:30:04.832Z",
4294967298
]
}
]
}
}

3)pit id + 排序鍵 翻頁(yè)

GET /_search
{
"size": 10000,
"query": {
"match" : {
"user.id" : "elkbee"
}
},
"pit": {
"id": "46ToAwMDaWR5BXV1aWQyKwZub2RlXzMAAAAAAAAAACoBYwADaWR4BXV1aWQxAgZub2RlXzEAAAAAAAAAAAEBYQADaWR5BXV1aWQyKgZub2RlXzIAAAAAAAAAAAwBYgACBXV1aWQyAAAFdXVpZDEAAQltYXRjaF9hbGw_gAAAAA==",
"keep_alive": "1m"
},
"sort": [
{"@timestamp": {"order": "asc", "format": "strict_date_optional_time_nanos"}}
],
"search_after": [
"2021-05-20T05:30:04.832Z",
4294967298
],
"track_total_hits": false
}

4)查詢完后,刪除 PIT

DELETE /_pit
{
"id" : "46ToAwMDaWR5BXV1aWQyKwZub2RlXzMAAAAAAAAAACoBYwADaWR4BXV1aWQxAgZub2RlXzEAAAAAAAAAAAEBYQADaWR5BXV1aWQyKgZub2RlXzIAAAAAAAAAAAwBYgACBXV1aWQyAAAFdXVpZDEAAQltYXRjaF9hbGw_gAAAAA=="
}

scroll 和 search after 都是用來(lái)處理大數(shù)據(jù)時(shí)避免深度翻頁(yè)的,它們區(qū)別如下:

  1. 實(shí)現(xiàn)方式不同
  1. scroll 使用游標(biāo)來(lái)保持搜索上下文,而 search after 使用排序鍵來(lái)跟蹤搜索進(jìn)度。
  1. 參數(shù)設(shè)置不同
  1. scroll 需要指定一個(gè)時(shí)間段來(lái)保持搜索上下文,而 search after 需要指定一個(gè)排序字段和一個(gè)起始排序鍵來(lái)開始搜索。
  1. 數(shù)據(jù)處理方式不同
  1. scroll 適用于一次性處理所有數(shù)據(jù)的場(chǎng)景,每次請(qǐng)求返回的結(jié)果可以是任意大小,直到搜索上下文過(guò)期或搜索完成為止。而。
  1. 排序方式不同
  1. scroll 可能會(huì)導(dǎo)致排序不穩(wěn)定的問(wèn)題,而 search after 使用排序鍵來(lái)跟蹤搜索進(jìn)度,可以避免這個(gè)問(wèn)題。
  1. 兼容性不同
  1. scroll 是 Elasticsearch 5.x 及之前版本的遺留功能,而 search after 是 Elasticsearch 7.0 中引入的新特性,Elasticsearch 7.0 開始推薦使用 search after。

4.3.2 match

想對(duì)搜索關(guān)鍵字進(jìn)行分詞,搜索的結(jié)果更全面。

特點(diǎn)

  1. 會(huì)對(duì)查詢條件進(jìn)行分詞
  2. 然后將分詞后的查詢條件和詞條進(jìn)行等值匹配
  3. 默認(rèn)取并集
GET goods/_search
{
"query": {
"match": {
"title": "華為手機(jī)"
}
}
}

# 指定取交集
GET goods/_search
{
"query": {
"match": {
"title": {
"query": "華為手機(jī)",
"operator": "and"
}
}
}
}

4.3.3 term

不想對(duì)搜索關(guān)鍵字進(jìn)行分詞,搜索的結(jié)果更加精確。

GET goods/_search
{
"query": {
"term": {
"title": {
"value": "華為"
}
}
}
}

4.3.4 range

當(dāng)想對(duì)數(shù)值類型的字段做區(qū)間的搜索,例如商品價(jià)格。

# 價(jià)格大于等于2000,小于等于3000
# gte: >= lte:<= gt:> lt:<
GET goods/_search
{
"query": {
"range": {
"price": {
"gte": 2000,
"lte": 3000
}
}
}
}

4.3.5 wildcard

當(dāng)使用match搜索仍然查詢不到數(shù)據(jù),可以嘗試使用模糊查詢,范圍更廣。

GET goods/_search
{
"query": {
"match": {
"title": "華"
}
}
}

運(yùn)行結(jié)果:

可以發(fā)現(xiàn)查詢的結(jié)果中,那些title包含“華為”的數(shù)據(jù)查不出來(lái),因?yàn)槟切?shù)據(jù),沒有分出"華"這一個(gè)字,而分出的就是"華為",這個(gè)時(shí)候我們?nèi)粝氚寻?華為"的數(shù)據(jù)都查出來(lái),就可以使用模糊查詢。

4.3.6 query_string

當(dāng)不知道搜索的內(nèi)容存儲(chǔ)在哪個(gè)字段時(shí),可以使用字符串搜索。

特點(diǎn)

  1. 會(huì)對(duì)查詢條件進(jìn)行分詞
  2. 將分詞后的查詢條件和詞條進(jìn)行等值匹配
  3. 默認(rèn)取并集(OR)
  4. 可以指定多個(gè)查詢字段

1)不指定字段

GET goods/_search
{
"query": {
"query_string": {
"query": "華為手機(jī)"
}
}
}

2)指定字段

GET goods/_search
{
"query": {
"query_string": {
"fields": ["title", "brand"],
"query": "華為手機(jī)"
}
}
}

運(yùn)行結(jié)果:

4.3.7 bool?

當(dāng)存在多個(gè)查詢條件時(shí)

語(yǔ)法

must(and):條件必須成立
must_not(not):條件必須不成立,必須和must或filter連接起來(lái)使用
should(or):條件可以成立
filter:條件必須成立,性能比must高(不會(huì)計(jì)算得分)

# 查詢品牌為華為,并且title包含手機(jī)的數(shù)據(jù)
GET goods/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"brand": {
"value": "華為"
}
}
},
{
"match": {
"title": "手機(jī)"
}
}
]
}
}
}

運(yùn)行結(jié)果:

4.3.8 Aggregations?

聚合查詢

聚合類型:

  1. 指標(biāo)聚合:相當(dāng)于MySQL的聚合函數(shù)。比如max、min、avg、sum等。
  2. 桶聚合:相當(dāng)于MySQL的 group by 操作。(不要對(duì)text類型的數(shù)據(jù)進(jìn)行分組,會(huì)失敗)

4.3.8.1 指標(biāo)聚合

# 指標(biāo)聚合:找品牌是華為的商品中價(jià)格最高的商品價(jià)格
GET goods/_search
{
"query": {
"term": {
"brand": {
"value": "華為"
}
}
},
"aggs": {
"max_price": {
"max": {
"field": "price"
}
}
},
"size": 0
}

運(yùn)行結(jié)果:

4.3.8.2 桶聚合
# 桶聚合:根據(jù)品牌聚合,看每個(gè)品牌的手機(jī)商品數(shù)據(jù)量
GET goods/_search
{
"query": {
"match": {
"title": "手機(jī)"
}
},
"aggs": {
"brand_num": {
"terms": {
"field": "brand"
}
}
},
"size": 0
}

運(yùn)行結(jié)果:

4.3.9 highlight(高亮查詢)

# 高亮:  title 中的“華為”和“手機(jī)”高亮起來(lái)
GET goods/_search
{
"query": {
"match": {
"title": "華為手機(jī)"
}
},
"highlight": {
"fields": {
# 高亮字段
"title": {
# 前綴
"pre_tags": "<font class = 'color_class'>",
# 后綴
"post_tags": "</font>"
}
}
}
}

運(yùn)行結(jié)果:

5 總結(jié)

這篇文章的宗旨是希望可以幫助剛接觸ES 的人可以快速了解ES,和掌握ES 的一些常用查詢。

責(zé)任編輯:華軒 來(lái)源: 51CTO
相關(guān)推薦

2022-02-21 09:44:45

Git開源分布式

2021-05-20 06:57:16

RabbitMQ開源消息

2021-01-12 09:04:12

Django FormForm組件開發(fā)

2021-12-29 11:32:38

數(shù)據(jù)結(jié)構(gòu)算法爬樓梯

2021-06-16 08:28:25

unary 方法函數(shù)技術(shù)

2025-01-17 07:00:00

2021-05-18 05:40:27

kubebuilderwebhook進(jìn)階

2022-02-24 07:56:42

開發(fā)Viteesbuild

2021-05-12 06:18:19

KubeBuilderOperatork8s

2021-05-17 05:51:31

KubeBuilderOperator測(cè)試

2022-03-10 08:31:51

REST接口規(guī)范設(shè)計(jì)Restful架構(gòu)

2020-12-23 08:39:11

Go語(yǔ)言基礎(chǔ)技術(shù)

2021-05-16 10:52:58

kubebuilderstatus event

2023-05-12 08:19:12

Netty程序框架

2022-04-08 08:32:40

mobx狀態(tài)管理庫(kù)redux

2021-06-30 00:20:12

Hangfire.NET平臺(tái)

2021-07-14 08:24:23

TCPIP 通信協(xié)議

2021-07-28 10:02:54

建造者模式代碼

2021-08-11 07:02:21

npm包管理器工具

2021-11-08 08:42:44

CentOS Supervisor運(yùn)維
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

欧美9999| 国产a级黄色片| av一本在线| 理论片日本一区| 欧美插天视频在线播放| 制服下的诱惑暮生| 黄在线观看免费网站ktv| 91丨porny丨国产入口| 国产黑人绿帽在线第一区| 超碰人人干人人| 国产一区二区三区国产精品| 一区二区激情小说| 蜜桃成人在线| 一区二区三区播放| 亚洲视频观看| 一区二区三区高清国产| 亚洲精品在线网址| 瑟瑟视频在线看| 国产精品久久久久久亚洲伦| 国产精品久久久久久久久久直播| 日产精品久久久| 99热在线成人| 在线观看福利电影| 久久亚洲二区三区| 成人a在线视频| 日韩 欧美 综合| av伊人久久| 精品噜噜噜噜久久久久久久久试看 | 欧美凹凸一区二区三区视频| 91成品人影院| 国产精品一二| 欧美成人剧情片在线观看| 黄色性生活一级片| 综合久久av| 色94色欧美sute亚洲线路一久 | 在线成人www免费观看视频| 亚洲精品一区二区网址| 中文字幕国产高清| 亚洲欧美视频二区| 亚洲欧洲国产综合| 国产在线视视频有精品| 日本一欧美一欧美一亚洲视频| 国产精品丝袜一区二区| 狠狠色狠狠色综合婷婷tag| 日韩午夜三级在线| 9久久婷婷国产综合精品性色 | 国产chinasex对白videos麻豆| 久久亚洲图片| 欧美主播福利视频| 国产精品第72页| 欧美三级黄美女| 久久久国产91| 成年人视频软件| 久久99蜜桃| 亚洲精品久久视频| 大尺度在线观看| 精品国产伦一区二区三区观看说明| 狂野欧美性猛交xxxxx视频| 国产99久久久国产精品免费看 | 123成人网| 91成人在线免费观看| 久色视频在线播放| 俺来也官网欧美久久精品| 日韩一区日韩二区| 亚洲区一区二区三区| 看电影就来5566av视频在线播放| av不卡一区二区三区| 成人3d动漫一区二区三区91| 国产v片在线观看| 国产美女娇喘av呻吟久久| 国产日韩欧美夫妻视频在线观看 | 国产精品精品视频| 国产一级片免费视频| 国产精品欧美久久久久天天影视| 欧美美女黄色| 日韩激情av在线免费观看| 少妇户外露出[11p]| 亚洲桃色综合影院| 一区国产精品视频| 免费成人深夜天涯网站| 日韩精品永久网址| 中文字幕一区电影| 午夜精品福利在线视频| 欧美日韩一区自拍| 欧美高清自拍一区| 国产乡下妇女做爰毛片| 国产亚洲一级| 国产精品国产三级国产专播精品人 | 在线免费一区二区| 老司机午夜精品| 91精品在线影院| 亚洲精品久久久久久久久久久久久久| 成人丝袜视频网| 久久久久一区二区| 国产精品二线| 亚洲私人影院在线观看| 亚洲人成电影在线| 国产日韩成人内射视频 | 韩国av在线免费观看| 国产精品99久| 久久99导航| xxxxx日韩| 亚洲精品亚洲人成人网在线播放| 精品无码国产一区二区三区av| 热三久草你在线| 欧美日韩一区视频| av漫画在线观看| 国产一级成人av| 亚洲精品网站在线播放gif| 亚洲色图100p| 国产精品99一区二区三| 久久久天堂国产精品女人| 香蕉污视频在线观看| 国产一区二区三区综合| 久久综合伊人77777麻豆| 国产亚洲精品女人久久久久久| 色屁屁草草影院ccyycom| 久久国产生活片100| 国产伦精品一区二区三区四区免费| 麻豆国产在线播放| 一区二区三区美女| 天堂在线资源视频| 久久久久久久久久久久久久久久久久久久 | 91年精品国产| ijzzijzzij亚洲大全| 成人免费看视频网站| 日韩一级免费一区| 国产真人真事毛片视频| 中国女人久久久| 成人网在线免费观看| 免费a级毛片在线观看| 一区二区三区四区视频精品免费 | 成人做爰视频网站| 久久国产三级| 伊人久久久大香线蕉综合直播 | 日韩欧美在线一区二区| 中文国产字幕在线观看| 午夜精品影院在线观看| 激情久久综合网| 欧美在线观看视频一区| 欧美亚洲另类制服自拍| 亚洲乱色熟女一区二区三区| 中文一区二区在线观看| 北条麻妃在线观看| 91综合久久爱com| 欧美成人黄色小视频| 亚洲精品无码久久久久| 91丨九色丨蝌蚪丨老版| 国产精品国产三级国产专区51| 久久av影院| 日韩在线精品视频| 一级一级黄色片| 久久久亚洲国产美女国产盗摄| 国产h视频在线播放| 日韩一级视频在线观看| 激情av综合| 欧美激情奇米色| 国产三级伦理片| 国产精品理论在线观看| 国产九九在线视频| 成人网18免费网站| 国产精品视频一区国模私拍 | 在线视频一二三区| 高清一区二区三区av| 久久久精品久久久久| 国产精品久久综合青草亚洲AV| 国产精品色一区二区三区| 成人免费看片'免费看| 亚州一区二区| 久久久久国色av免费观看性色| 精品女同一区二区三区| 亚洲影院理伦片| 国产精品麻豆入口| 国产亚洲毛片在线| 欧美性xxxx18| 欧美视频免费看欧美视频| 超碰成人免费| 午夜精品久久久99热福利| 五十路在线视频| 日本高清视频一区二区| 国产第一页精品| 国产在线一区观看| 精品一区二区三区无码视频| 久久精品亚洲成在人线av网址| 91国在线精品国内播放| 理论在线观看| 欧美精品乱人伦久久久久久| 久久久精品视频免费观看| 粉嫩高潮美女一区二区三区| 波多野结衣家庭教师在线| 亚洲素人在线| 成人性生交大片免费看视频直播 | 国产v日韩v欧美v| 亚洲美女色播| 色吧影院999| av中文字幕在线免费观看| 亚洲午夜免费视频| 91精彩刺激对白露脸偷拍| 久久er精品视频| 波多野结衣av一区二区全免费观看| 天美av一区二区三区久久| 4438全国成人免费| 91se在线| 日韩美女天天操| 潘金莲一级淫片aaaaaa播放| 亚洲欧美另类小说| 中文字幕第3页| 奇米亚洲午夜久久精品| www.xxx麻豆| 日韩一级毛片| 黑人中文字幕一区二区三区| av在线日韩| 欧美精品电影免费在线观看| 成人在线视频成人| 亚洲成年人在线播放| 天天天天天天天干| 婷婷中文字幕一区三区| 亚洲最新av在线网站| 六月丁香激情综合| 亚洲视频一区二区免费在线观看| 香蕉视频xxxx| 性欧美暴力猛交另类hd| 国产av第一区| 欧美日韩精品一区二区视频| 国产女主播一区二区| 日韩五码电影| 国产精品电影观看| 美女搞黄视频在线观看| 理论片在线不卡免费观看| 久草在线青青草| 亚洲国产成人av在线| 国产情侣在线播放| 欧美午夜精品久久久| 可以免费在线观看的av| 亚洲国产人成综合网站| 亚洲伦理一区二区三区| 久久久av毛片精品| 噜噜噜在线视频| 国模少妇一区二区三区| 37pao成人国产永久免费视频| 亚洲高清影视| 无码免费一区二区三区免费播放| 日本泡妞xxxx免费视频软件| 国产精品hd| 手机福利在线视频| 日韩欧美精品| 日韩三级电影网站| 国产一区二区三区日韩精品| 国产一区二区无遮挡| 日韩中文一区二区| 91久久精品国产91久久性色tv| 成人国产网站| 国产精品视频网| 欧美日韩视频网站| 欧美尤物巨大精品爽| 中文字幕有码在线观看| 日韩在线观看高清| 国产不卡在线| 欧美另类极品videosbest最新版本 | 国产精品日本| 人妻久久久一区二区三区| 欧美成人milf| 一区二区在线观看网站| 国产精品99在线观看| 国产高清精品软男同| 手机免费看av片| 日韩精品成人一区二区三区| 日本黄色三级大片| 日韩av一区二区在线影视| 污污的网站18| 久久97超碰色| www.五月天色| 丁香啪啪综合成人亚洲小说 | 成人综合婷婷国产精品久久 | 久久激情综合网| 看看黄色一级片| 国产精选一区二区三区| 男人添女人荫蒂国产| 风间由美一区二区三区在线观看| 无码国产精品一区二区免费式直播| 成人午夜视频免费看| 日韩成人av一区二区| 96av麻豆蜜桃一区二区| 妺妺窝人体色WWW精品| 中文字幕在线视频一区| 中文字幕影音先锋| 午夜激情一区二区| 99在线免费视频观看| 高清国产福利在线观看| 亚洲国产精品福利| 亚洲欧美另类一区| 亚洲欧美国产精品久久久久久久 | 日韩中文字幕在线观看视频| 91电影在线观看| 国产麻豆免费视频| 亚洲国产成人精品一区二区| 神马一区二区三区| 中文日韩在线观看| 青青在线视频| 国产精品美乳一区二区免费 | 成人动漫视频在线观看完整版| 国产色噜噜噜91在线精品| 久久精品日韩| 婷婷亚洲五月| 国产二区视频在线播放| 国模一区二区三区白浆| 无码人妻aⅴ一区二区三区| 中文字幕精品—区二区四季| 一区二区三区免费高清视频| 色乱码一区二区三区88| 午夜精品久久久久久久第一页按摩| 亚洲欧美国产va在线影院| av官网在线播放| 91精品国产91久久久久福利| 3d动漫一区二区三区在线观看| 国产美女99p| 久久综合av| 奇米精品一区二区三区| 精品亚洲成a人| 国产一区二区精品免费| 天天操天天操天天操| 国产丝袜一区二区三区| 中日韩高清电影网| 国产精品高清网站| 日韩电影不卡一区| wwwjizzjizzcom| 美女爽到高潮91| 九色porny自拍视频| 亚洲午夜国产一区99re久久| 91禁在线观看| 亚洲精品wwww| 国产不卡在线| 国产一区二区丝袜高跟鞋图片| 外国成人在线视频| 成人污网站在线观看| 久久成人久久爱| 免费观看a级片| 欧美性xxxxx极品| 黑人精品一区二区三区| 中文字幕免费精品一区高清| 免费网站在线观看人| 亚洲www在线| 久久久久电影| 亚洲 国产 图片| 国产精品白丝在线| 在线观看亚洲一区二区| 亚洲丝袜av一区| 激情开心成人网| 蜜桃臀一区二区三区| 亚洲一区免费| av噜噜色噜噜久久| 巨大荫蒂视频欧美大片| 成人福利在线视频| 亚洲视频电影在线| 在线播放av网址| 亚洲成人免费观看| 欧美色综合一区二区三区| 国产精品白嫩初高中害羞小美女 | 成人做爰免费视频免费看| 日韩欧美第二区在线观看| 日本va欧美va瓶| 国产精品99久久久久久成人| 欧美一区午夜视频在线观看 | 91精品综合| 性生活在线视频| 午夜激情久久久| 高清国产福利在线观看| 成人免费网站在线看| 亚洲视频精品| 亚洲精品色午夜无码专区日韩| 欧美日韩一二区| 黄污视频在线观看| 欧美日韩精品免费看| 久久国产视频网| 日本免费一二三区| 在线播放国产一区二区三区| a级黄色片免费看| 91 com成人网| 中文字幕在线观看免费视频| 看电视剧不卡顿的网站| 黄色片网站在线播放| 日韩你懂的在线观看| 一区二区三区短视频| 亚洲精美视频| 成人看片黄a免费看在线| 香蕉污视频在线观看| 欧美另类高清videos| 久久爱www成人| 日韩av影视大全| 欧美性猛交xxxx乱大交3| 亚洲成人影院麻豆| 精品视频在线观看| 蜜乳av一区二区三区| 国产91av视频| 久久精品99久久久香蕉| 秋霞影院一区二区三区| 波多野结衣网页| 色www精品视频在线观看| 爱看av在线| 性生活免费观看视频|