04_python使用elasticsearch

连接es并创建Index

from elasticsearch import Elasticsearch

usr = 'guest' # es账号
pss = 'abc123' # es密码
es = Elasticsearch(host="localhost", port=9200, http_auth=(usr,pss))

# Create Template of Index
bdy = {
    "settings": {
        "number_of_shards": 3, # 指索引要做多少个分片,只能在创建索引时指定,后期无法修改
        "number_of_replicas": 2 # 指每个分片有多少个副本,后期可以动态修改
    },
    "mappings":{
            "properties":{
                "id":{
                    "type":"integer",
                },
                "text": {
                    "type": "text",
                    "analyzer": "ik_max_word",  #指定ik分词器,适用中文分词。
                    "index":False
                },
                "userId": {
                    "type": "long"
                },
                "reprinted": {
                    "type": "keyword"
                },
            }
    }
}
#创建 index
es.indices.create(index = "test", body = bdy)
# #删除 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(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":"小明"}}}
#范围查询
"""
gt:大于
gte:大于等于
lt:小于
lte:小于等于
"""
{"query":{"range":{"testTime":{"gte":"2020-12-01", "lte":"2020-12-31"}}}}



#排序
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")

Reference:
python-elasticsearch基本用法 - 做个笔记 - 博客园 (cnblogs.com)

你可能感兴趣的:(04_python使用elasticsearch)