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:desc3、指定要查詢出來商品的名稱和價格
GET /ecommerce/product/_search?_source=name,pricequery 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個商品
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”(采用部分更新的方式)
說明:
(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常用搜索命令整理(长期更新...)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 系统创建定时执行任务bat批处理删除指定
- 下一篇: WWW2022推荐系统/计算广告论文集锦