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的創建
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之增删改查与其他基本操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何看电脑内存型号?
- 下一篇: unity3d优化收集摘录