1. 程式人生 > 實用技巧 >python-elasticsearch基本用法

python-elasticsearch基本用法

python-elasticsearch基本用法

一、安裝

pip install elasticsearch			
pip install elasticsearch[async]	#支援非同步的es庫

二、例項es物件,並建立index

from elasticsearch import Elasticsearch
from elasticsearch import AsyncElasticsearch

es = Elasticsearch(host="localhost", port=9200)
#es = AsyncElasticsearch()

body = {
    "settings": {
		"number_of_shards": 3,
		"number_of_replicas": 2
	},
    "mappings":{
        # "_doc":{
            "properties":{
                "id":{
                    "type":"integer",
                    "index":True
                },
                "text": {
                    "type": "text",
                    "index":False
                },
                "userId": {
                    "type": "long",
                    "index": True
                },
                "reprinted": {
                    "type": "keyword",
                    "index": True
                },
            }
        # }
    }
}
#建立 index
es.indices.create(index = "test", body = body)
#刪除 index
es.indices.delete(index = 'test')

三、增刪改查

#插入資料
es.index(index = "test", doc_type = "_doc", id = 1, body = {"id":1, "name":"小明"})
#可以不用指定id,create會自動新增id。
es.create(index="test", doc_type = "_doc",id = 2, body = {"id":2, "name":"小紅"})

#刪除指定資料
es.delete(index='test', doc_type='_doc', id=1)

#修改欄位
es.update(index = "test", doc_type = "_doc", id = 1, body = {"doc":{"name":"張三"}})

#查詢資料
es.get(index = "test", doc_type = "_doc", id = 1)
es.search(index = "test", doc_type = "_doc", body = query)
#滾動分頁的func,第四塊部分 分頁查詢中 說明
es.scroll(index = "test", scroll_id = "scroll_id", scroll = "5m")


#批量插入&批量更新
"""
{
	'_index':'test',
	'_type':'_doc',
	'_id':20,
	'doc':{'name':'李四', 'id':20},
}
	插入的每一個數據中,都需要指定 _index,_type,_id 更新、插入的資料放在doc中
"""
from elasticsearch.helpers import async_bulk,bulk
async def main():
    await async_bulk(es, data)
bulk(es, data)

四、es.search篩選資料的引數

es.search(index = "test", doc_type = "_doc", body = body, size = 10)
"""
index、doc_type、body
size = 10 : 返回的資料量
filter_path = [ 'hits.hits._id','hits.hits._type']: 用於指定響應的內容
default_operator: 指定查詢的運算子 AND或者OR 預設值為:OR
from_ = 0 : 返回資料的起始值,用於分頁
scroll = "5m" : 是否記錄滾動翻頁的索引值, 記錄5分鐘
"""


#返回所有資料
body = {"query":{"match_all": {}}}
#指定檢索欄位
body = {"query":{"match": {"name":"小明"}}}


#排序
body = {
    "query":{...}, 
    "sort":[
        {
            "id(排序欄位)":{
                "order" : "desc"   #asc\desc  升序\降序
            }
        }
    ]
}



#分頁,從第10個數據開始,返回10條資料。   ==   [10:20]
es.search(size = 10, from_ = 10)

#使用滾動分頁,速度快,查詢後會記錄最後一條資料,不適用跳頁查詢。
#響應返回 _scroll_id欄位、呼叫es.scroll方法返回下一頁。
es.search(scroll = "5m")
es.scroll(scroll_id = "_scroll_id", scroll = "5m")