日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ElasticSearch常用搜索命令整理(长期更新...)

發布時間:2023/12/16 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ElasticSearch常用搜索命令整理(长期更新...) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  • 基礎入門版
    • 快速檢查集群的健康狀況
    • 快速查看集群中有哪些索引
    • 索引的CRUD操作以商品為例
      • 新增商品建立索引
      • 查詢商品參見查詢專題詳解
      • 修改商品name
      • 刪除商品
  • 查詢專題版
    • query string search不常用
    • query DSLDomain Specified Language特定領域的語言
    • query filter
    • full-text search全文檢索
    • phrase search短語搜索
    • highlight search高亮搜索結果
  • 批量操作
    • 批量查詢mget
    • 批量操作bulk

基礎入門版

快速檢查集群的健康狀況

GET /_cat/health?v

說明:如何快速了解集群的健康狀況?green、yellow、red?
green:每個索引的primary shard和replica shard都是active狀態的
yellow:每個索引的primary shard都是active狀態的,但是部分replica shard不是active狀態,處于不可用的狀態
red:不是所有索引的primary shard都是active狀態的,部分索引有數據丟失了

快速查看集群中有哪些索引

GET /_cat/indices?v

索引的CRUD操作,以商品為例

新增商品(建立索引)

(1)手動指定document id(用于其他庫倒進來時本身就含有id的情況)

PUT /ecommerce/product/1 {"name" : "gaolujie yagao","desc" : "gaoxiao meibai","price" : 30,"producer" : "gaolujie producer","tags": [ "meibai", "fangzhu" ] }

說明:若已經有/ecommerce/product/1該數據,此時“新增”操作變成“全量替換”,舊數據被deleted。因此如果我們要需要創建,而不允許替換數據(邏輯:若已經有該條數據,則不進行任何操作(報錯回滾))

(2)自動生成document id(自動生成的id,長度為20個字符,URL安全,base64編碼,GUID,分布式系統并行生成時不可能會發生沖突)

POST /ecommerce/product {"name" : "gaolujie yagao","desc" : "gaoxiao meibai","price" : 30,"producer" : "gaolujie producer","tags": [ "meibai", "fangzhu" ] }

查詢商品(參見查詢專題詳解)

GET /ecommerce/product/1

修改商品name

全量替換:

PUT /ecommerce/product/1 {"name" : "jiaqiangban gaolujie yagao","desc" : "gaoxiao meibai","price" : 30,"producer" : "gaolujie producer","tags": [ "meibai", "fangzhu" ] }

部分修改:

POST /ecommerce/product/1/_update {"doc": {"name": "jiaqiangban gaolujie yagao"} }

刪除商品

DELETE /ecommerce/product/1

說明:不會理解物理刪除,只會將其標記為deleted,當數據越來越多的時候,在后臺自動刪除


查詢專題版

query string search(不常用)

1、搜索全部商品:

GET /ecommerce/product/_search

查詢結果部分字段說明:
took:耗費了幾毫秒。
timed_out:是否超時,這里是沒有。
_shards:數據拆成了5個分片,所以對于搜索請求,會打到所有的primary shard(或者是它的某個replica shard也可以)。
hits.total:查詢結果的數量,3個document。
hits.max_score:score的含義,就是document對于一個search的相關度的匹配分數,越相關,就越匹配,分數也高。
hits.hits:包含了匹配搜索的document的詳細數據。

2、搜索商品名稱中包含yagao的商品,而且按照售價降序排序

GET /ecommerce/product/_search?q=name:yagao&sort=price:desc

3、指定要查詢出來商品的名稱和價格

GET /ecommerce/product/_search?_source=name,price

query DSL(Domain Specified Language,特定領域的語言)

1、查詢所有的商品(match_all)

GET /ecommerce/product/_search {"query": { "match_all": {} } }

2、查詢名稱包含yagao的商品,同時按照價格降序排序(sort)

GET /ecommerce/product/_search {"query" : {"match" : {"name" : "yagao"}},"sort": [{ "price": "desc" }] }

3、分頁查詢商品(from,size)
例如:總共3條商品,假設每頁就顯示1條商品,現在顯示第2頁,所以就查出來第2個商品

GET /ecommerce/product/_search {"query": { "match_all": {} },"from": 1,"size": 1 }

4、指定要查詢出來商品的名稱和價格(source)

GET /ecommerce/product/_search {"query": { "match_all": {} },"_source": ["name", "price"] }

5、查詢name和desc都含yagao的商品(multi_match)

GET /ecommerce/product/_search {"query": {"multi_match": {"query": "yagao","fields": ["name", "desc"]}} }

6、查詢價格大于等于30的商品(range)

GET /ecommerce/product/_search {"query": {"range": {"price": {"gte": 30}}} }

7、查詢name是yagao的商品(term 或者 terms數組指定多個)

GET /test_index/test_type/_search {"query": {"term": {"name ": "yagao"}} }

說明:不常用。若想用term查詢,則被查詢的字段需要定義為不分詞。

query filter

1、搜索商品名稱包含yagao,而且售價大于25元的商品

GET /ecommerce/product/_search {"query" : {"bool" : {"must" : {"match" : {"name" : "yagao" }},"filter" : {"range" : {"price" : { "gt" : 25 } }}}} }

說明:bool 多條件查詢,含以下參數:
must:返回的doc必須滿足must子句的條件,并且參與計算score
must_not:返回的文檔必須不滿足must_not定義的條件
should:返回的文檔可能滿足should子句的條件。在一個Bool查詢中,如果沒有must或者filter,有一個或者多個should子句,那么只要滿足一個就可以返回。minimum_should_match參數定義了至少滿足幾個子句。
filter:返回的doc必須滿足filter子句的條件,不參與計算sorce

full-text search(全文檢索)

GET /ecommerce/product/_search {"query" : {"match" : {"producer" : "yagao producer"}} }

phrase search(短語搜索)

跟全文檢索相對應,相反,全文檢索會將輸入的搜索串拆解開來,去倒排索引里面去一一匹配,只要能匹配上任意一個拆解后的單詞,就可以作為結果返回。

phrase search,要求輸入的搜索串,必須在指定的字段文本中,完全包含一模一樣的,才可以算匹配,才能作為結果返回。

GET /ecommerce/product/_search {"query" : {"match_phrase" : {"producer" : "yagao producer"}} }

highlight search(高亮搜索結果)

GET /ecommerce/product/_search {"query" : {"match" : {"producer" : "producer"}},"highlight": {"fields" : {"producer" : {}}} }

批量操作

批量查詢mget

獲取商品id為1和2的商品信息(假設在同一個index和type下)

GET /_mget {"docs" : [{"_index" : "ecommerce","_type" : "product","_id" : 1},{"_index" : "ecommerce","_type" : "product","_id" : 2}] }或者GET /ecommerce/_mget {"docs" : [{"_type" : "product","_id" : 1},{"_type" : "product","_id" : 2}] }或者GET /ecommerce/product/_mget {"ids": [1, 2] }

批量操作bulk

需求:
1、刪除id為1的商品
2、創建id為3的商品(name為“zhonghua yagao”)
3、修改商品2的name為“replaced zhonghua yagao”(采用全量替換的方式)
4、修改商品3的name為“bulk zhonghua yagao”(采用部分更新的方式)

POST /_bulk { "delete": { "_index": "ecommerce", "_type": "product", "_id": "1" }} { "create": { "_index": "ecommerce", "_type": "product", "_id": "3" }} { "name": "zhonghua yagao" } { "index": { "_index": "ecommerce", "_type": "product", "_id": "2" }} { "name": "replaced zhonghua yagao" } { "update": { "_index": "ecommerce", "_type": "product", "_id": "3", "_retry_on_conflict" : 3} } { "doc" : {"name" : "bulk zhonghua yagao"} }

說明:
(1)delete:刪除一個文檔,只要1個json串就可以了
(2)create:PUT /index/type/id/_create,強制創建
(3)index:普通的put操作,可以是創建文檔,也可以是全量替換文檔
(4)update:執行的partial update操作

bulk api對json的語法,有嚴格的要求,每個json串不能換行,只能放一行,同時一個json串和一個json串之間,必須有一個換行

參考:ElasticSearch教程(龍果學院)

總結

以上是生活随笔為你收集整理的ElasticSearch常用搜索命令整理(长期更新...)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。