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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

elasticsearch之增删改查与其他基本操作

發布時間:2023/12/8 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 elasticsearch之增删改查与其他基本操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

要安裝elasticsearch就要安裝1.8版本以上的java的JDK
我是在windows下安裝的elasticsearch
下載java的1.8以上的JDK,elasticsearch,kibana,ik分詞的鏈接
kibana的下載地址
elasticsearch6.5.4的下載地址
ik分詞器下載
java1.8JDK下載地址
java下載完后需要配置環境變量,我是在win7下配置的,下面是配置流程
配置java環境變量
文件下載完之后記得解壓
然后把ik分詞的文件夾放入elasticsearch的plugins文件夾下面


批處理文件啟動elasticsearch

啟動kibana的批處理文件


兩個啟動之后是這樣的
然后訪問127.0.0.1:9200

得出這樣的結果就證明elasticsearch啟動成功
再訪問127.0.0.1:5601

得出這樣的頁面就算kibana啟動成功
接下來我們可以在這里面進行elasticsearch的語法操作了

ok,我們先行一下簡單的

增刪改查:

增:

PUT test1/type1/1 #無則新增,有則更新,test1代表索引,type1代表文檔,1則為數據的_id {"name":"kevin", #字段屬性"age":18 } #put也可以用post代替 POST cloth/logo/1 {"name":"adidas","price":1500,"size":"xxxl","color":["blue","blank","red"] }PUT cloth/logo/2 {"name":"adidas","price":1200,"size":"xxl","color":["blue","blank"] }PUT cloth/logo/3 {"name":"adidas","price":1300,"size":"xxxxxl","color":["blue","red"] }PUT cloth/logo/4 {"name":"adidas","price":1400,"size":"sl","color":["blank","red"] }PUT cloth/logo/5 {"name":"kappa","price":1500,"size":"l","color":["blue","blank","red"] }

這里我新增了幾條數據
當然,put如果更新數據,會覆蓋掉指點的數據,比如我只更新name而不寫age,則該索引更新后結果只會有age
用post來更新則是在原有的字段屬性上進行修改,當然,post也能用來更新,和上面的用法一樣

查:

GET test1/type1/1 #查詢id=1的數據 GET test1/type1/_search #查詢所有 {"query":{"match_all":{} } } GET test1/type1/_search #條件篩選查詢 {"query":{"match":{“name”:"kevin" } } } GET cloth/logo/_search #排序查詢,有兩個查詢條件,當第一個排序條件出現相同情況使用第二個排序條件 {"query": {"match_all": {}},"sort": [{"price": {"order": "desc"}},{"_id": {"order": "asc"}}] }GET cloth/logo/_search #排序并分頁,from代表起點,size代表偏移量 {"query": {"match": {"name": "adidas"}},"sort": [{"price": {"order": "desc"}}],"from": 2,"size": 2 }GET cloth/logo/_search #查詢相關字段 {"query":{"match": {"name": "adidas"}},"_source": ["size","price"] }GET cloth/logo/_search #這里使用了bool判斷,must代表and,兩個match相當于兩個條件 {"query": {"bool": {"must": [{"match": {"name": "adidas"}},{"match": {"size": "xxl"}}]}} }GET cloth/logo/_search #should相當于or條件,filter指的是是必須滿足的條件 {"query": {"bool": {"should": [{"match": {"name": "adidas"}}],"filter": {"range": {"price":{"gte":1400}}}}} }GET cloth/logo/_search #查詢值為數組的方法,是一個字符串,中間用空格隔開 {"query": {"match": {"color": "blank blue"}} }GET cloth/logo/_search #代碼高亮 {"query": {"match": {"name": "adidas"}},"highlight": {"pre_tags": "<b style='color:red' class='key'>","post_tags": "</b>","fields": {"name": {}}} }GET cloth/logo/_search #聚合函數,求平均值 {"size": 0, "aggs": {"avg_price": {"avg": {"field": "price"}}} }GET cloth/logo/_search #聚合函數進階之分組求和 {"size": 0,"aggs": {"group": {"range": {"field": "price","ranges": [{"from": 500,"to": 1000},{"from":1000,"to":1300},{"from": 1300,"to":1600}]},"aggs": {"sum_price": {"sum": {"field": "price"}}}}} }

改:

POST /cloth/logo/1/_update #在原有數據上新增一條prices {"doc":{"prices":1001} }POST /cloth/logo/1/_update #更改price的值 {"doc":{"price":1002} }

刪:

DELETE cloth/logo/1 #刪除id為1 的文檔 DELETE cloth #刪除索引

中途擴展一下:
mapping的創建

PUT index3 #創建mapping, 自動或手動為index中的type建立的一種數據結構和相關配置,簡稱為mapping {"mappings": {"testmap":{"dynamic":"strict","properties":{"name":{"type":"text"},"age":{"type":"long"}}}} } PUT index3/testmap/1 #這種數據符合條件 {"name":"kevin","age":18 } PUT index3/testmap/2 #多余了一個sex字段屬性,在dynamic為strict的情況下不允許插入數據 {"name":"kevin","age":18,"sex":"男" } dynamic: false-動態屬性不會去建立索引,通過動態創建的屬性不能為查詢關鍵字,但通過其他索引查出來的數據其動態屬性會展示出來 true-動態屬性可以去創建索引 strict-插入數據時只能使用指定的屬性,否則報錯PUT index4 {"mappings":{"testmap":{"dynamic":false,"properties":{"book":{"type":"text","copy_to":"all"},"author":{"type":"text","copy_to":"all"},"all":{"type":"text"}}}} }PUT index4/testmap/1 {"book":"python","author":"kevin" }GET index4/testmap/_search {"query":{"match": {"all": "python"}} }#注意:copy_to會把當前屬性的值賦給指定屬性PUT index5 {"mappings":{"testmap":{"dynamic":false,"properties":{"book":{"type":"text","index":true},"author":{"type":"text","index":false}}}} }PUT index5/testmap/1 {"book":"django","author":"kevin" }GET index5/testmap/_search #也就是說,你只有搜索book:django才能搜出結果 {"query": {"match": {"book": "django"}} }#注意:index在屬性中為false,則不會為這個屬性創建索引PUT index6/testmap/1 {"name":"kevin","addr":{"address":"beijing","tel":12323232323} }GET index6/testmap/_search {"query": {"match": {"addr.tel": 12323232323}} }#注意,這里的addr是一個對象屬性

ik分詞:

PUT ik1 #創建mapping以及指定分詞器 {"mappings": {"iktest":{"dynamic":false,"properties":{"content":{"type":"text","analyzer":"ik_max_word"}}}} }PUT ik1/iktest/1 #王ik1索引插入數據 {"content":"我愛北京天安門" }GET ik1/iktest/_search #查詢京字出不來,只能查北京,屬于粗粒度 {"query": {"match": {"content": "北京"}} }PUT noik1 #設置一個mapping {"mappings": {"noiktest":{"dynamic":false,"properties":{"content":{"type":"text"}}}} }PUT noik1/noiktest/1 #插入同樣數據 {"content":"我愛北京天安門" }GET noik1/noiktest/_search #不使用分詞器,一個京字都能查出來,粒度小 {"query": {"match": {"content": "京"}} }#注意:自帶的分詞會把詞分為一個一個的,不會像ik那樣根據詞義分詞PUT ik2/iktest/_mapping #ik分詞的第二種模式ik_smart,分詞粒度更大 {"iktest":{"_all":{"analyzer":"ik_smart"},"properties":{"content":{"type":"text"}}} }PUT ik2/iktest/1 {"content":"我愛上你訂撒嬌的年紀是你弟家安貝斯的擠奶神經病蒂薩舉辦地解散吧第九三班蒂薩紀念幣的" }PUT ik2/iktest/2 {"content":"我在北京天安門紀念幣" }GET ik2GET ik2/iktest/_search {"query":{"match":{"content": "紀念"}} } #ik_smart > ik_max_word>elasticsearch自帶分詞器

查詢已有的索引

GET _cat/indices?v

簡單的分詞器指定:

GET /_analyze {"analyzer": "ik_max_word","text":"我要做你爸爸" }運行看一看: {"tokens" : [{"token" : "我","start_offset" : 0,"end_offset" : 1,"type" : "CN_CHAR","position" : 0},{"token" : "要做","start_offset" : 1,"end_offset" : 3,"type" : "CN_WORD","position" : 1},{"token" : "做你","start_offset" : 2,"end_offset" : 4,"type" : "CN_WORD","position" : 2},{"token" : "爸爸","start_offset" : 4,"end_offset" : 6,"type" : "CN_WORD","position" : 3}] }#分成了以上樣子

elasticsearch與python交互:

先安裝

pip install elasticsearch

然后可以建立連接,創建索引和文檔數據

from elasticsearch import Elasticsearch #導入模塊con = Elasticsearch(['127.0.0.1:9200']) #建立連接 con.indices.create(index='test-index1',ignore=400) #創建索引#創建一個文檔 con.index(index='test-index1',doc_type='testmap',id=1,body={"name":"kevin"}) #也可以不指定id,id會自動生成 con.index(index='test-index1',doc_type='testmap',body={"name":"kevin"}) def query1(): #查詢id為1 的文檔數據result = con.get(index='test-index1',doc_type='testmap',id=1)return resultdef query2(): #查詢該索引所有數據body = {'query':{'match_all':{}}}result = con.search(index='test-index1',body=body)return resultdef query3(): #條件過濾查詢,要是用searchbody = {"query": {"bool": {"must": [{"match": {"name": "adidas"}}],"filter": {"range": {"price": {"gte": 1400}}}}}}result = con.search(index='cloth',body=body)return resultdef query4(): #查詢出content中有我在的內容然后刪除該數據body = {"query": {"match_phrase": {"content": "我在"}}}result = con.delete_by_query(index='ik2',body=body)return resultdef query5(): #創建yi個mappingbody = {"mappings": {"noiktest":{"dynamic":False,"properties":{"content":{"type":"text"}}}}}result = con.indices.create(index='python-map',body=body)return resultif __name__ == "__main__":print(query5())

以上就是elasticsearch的語法的基本操作了

總結

以上是生活随笔為你收集整理的elasticsearch之增删改查与其他基本操作的全部內容,希望文章能夠幫你解決所遇到的問題。

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