Python3操作ES7
1、连接ES7,创建索引
from elasticsearch import Elasticsearch
es = Elasticsearch(['127.0.0.1:9200'])
index_name = 'student'
request_body = {
"mappings": {
"properties": {
"name": {
"type": "keyword"
},
"age": {
"type": "integer"
},
"height": {
"type": "integer"
}
}
}
}
es.indices.create(index=index_name, body=request_body)
2、判断索引是否存在
from elasticsearch import Elasticsearch
es = Elasticsearch(['127.0.0.1:9200'])
index_name = "student"
if es.indices.exists(index_name) == True:
print('索引存在')
else:
print("索引不存在")
3、删除ES7的 student 索引
from elasticsearch import Elasticsearch
es = Elasticsearch(['127.0.0.1:9200'])
index_name = 'student'
es.indices.delete(index=index_name)
4、Python3 操作 ES7(查询向)
from elasticsearch import Elasticsearch
es = Elasticsearch(['127.0.0.1:9200'])
index_name = 'student'
# -------------------------------------------查询
# ------------------------查询所有数据
dsl = {
"query":{
"match_all":{}
}
}
res = es.search(index=index_name, doc_type='doc', body=dsl)
print(res)
# ------------------------等于查询,term与terms
# term: 查询 xx = “xx”
dsl = {
"query": {
"term": {
"name": "张三"
}
}
}
res = es.search(index=index_name, doc_type='doc', body=dsl) # 查询name="张三"的所有数据
print(res)
# terms: 查询 xx = “xx” 或 xx = “yy”
dsl = {
"query": {
"terms": {
"name": [
"张三", "李四"
]
}
}
}
res = es.search(index=index_name, doc_type='doc', body=dsl) # 查询 name="张三" 或 name="李四" 的所有数据
print(res)
# ------------------------包含查询,match与multi_match
dsl = {
"query": {
"match": {
"name": "张三"
}
}
}
res = es.search(index=index_name, doc_type='doc', body=dsl) # match: 匹配name包含"张三"关键字的数据
print(res)
dsl = {
"query": {
"multi_match": {
"query": "李四",
"fields": ["name", "addr"]
}
}
}
res = es.search(index=index_name, doc_type='doc', body=dsl) # multi_match: 在name和addr里匹配包含 李四 关键字的数据
print(res)
# ------------------------ids
dsl = {
"query": {
"ids": {
# "type": "",
"values": [
"1", "2"
]
}
}
}
res = es.search(index=index_name, doc_type='doc', body=dsl) # 搜索出id为1或2的所有数据
print(res)
# ------------------------复合查询bool
# bool有3类查询关系,must(都满足),should(其中一个满足),must_not(都不满足)
dsl = {
"query": {
"bool": {
"must": [
{
"term": {
"name": "张三"
}
},
{
"term": {
"age": "16" # 实际张三是15岁,故而未命中
}
}
]
}
}
}
res = es.search(index=index_name, doc_type='doc', body=dsl) # 获取name="张三"并且age=16的所有数据
print(res)
# -----------------------切片式查询
dsl = {
"query":{
"match_all":{}
},
"from":0, # 从第0条数据开始
"size":1 # 获取1条数据
}
res = es.search(index=index_name, doc_type='doc', body=dsl) # 从第0条数据开始,获取1条数据
print(res)
# -----------------------范围查询
dsl = {
"query": {
"range": {
"age": {
"gte": 18, # >=18
"lte": "30" # <=30
}
}
}
}
res = es.search(index=index_name, doc_type='doc', body=dsl) # 查询前缀为"李"的所有数据
print(res)
# -----------------------前缀查询
dsl = {
"query": {
"prefix": {
"name": "李"
}
}
}
res = es.search(index=index_name, doc_type='doc', body=dsl) # 查询前缀为"李"的所有数据
print(res)
# -----------------------通配符查询
dsl = {
"query": {
"wildcard": {
"name": "*三"
}
}
}
res = es.search(index=index_name, doc_type='doc', body=dsl) # 查询name以三为后缀的所有数据
print(res)
#---------------------------排序
dsl = {
"query":{
"match_all":{}
},
"sort":{
"age":{ # 根据age字段升序排序
"order":"asc" # asc升序,desc降序
}
}
}
res = es.search(index=index_name, doc_type='doc', body=dsl)
print(res)
dsl = {
"query":{
"match_all":{}
},
"sort":[
{
"age":{ # 先根据age字段升序排序
"order":"asc" # asc升序,desc降序
}
},
{
"name":{ # 后根据name字段升序排序
"order":"asc" # asc升序,desc降序
}
}
],
} # 多字段排序,注意顺序!写在前面的优先排序
res = es.search(index=index_name, doc_type='doc', body=dsl)
print(res)
# --------------------------filter_path, 响应过滤
# 只需要获取_id数据,多个条件用逗号隔开
# res = es.search(index=index_name, doc_type='doc', filter_path=["hits.hits._id"]) # # 只需要获取_id数据,多个条件用逗号隔开
res = es.search(index=index_name, doc_type='doc', filter_path=["hits.hits._*"]) # # 获取所有数据
print(res)
# ------------------count, 执行查询并获取该查询的匹配数
# 获取数据量
res = es.count(index=index_name, doc_type='doc')
print(res)
# ---------------------度量类聚合
# 获取最小值
dsl = {
"query":{
"match_all":{}
},
"aggs":{ # 聚合查询
"min_age":{ # 最小值的key
"min":{ # 最小
"field":"age" # 查询"age"的最小值
}
}
}
}
res = es.search(index=index_name, doc_type='doc', body=dsl) # # 搜索所有数据,并获取age最小的值
print(res)
# 获取最大值
dsl = {
"query":{
"match_all":{}
},
"aggs":{ # 聚合查询
"max_age":{ # 最大值的key
"max":{ # 最大
"field":"age" # 查询"age"的最大值
}
}
}
}
res = es.search(index=index_name, doc_type='doc', body=dsl) # # 搜索所有数据,并获取age最大的值
print(res)
# 获取和
dsl ={
"query":{
"match_all":{}
},
"aggs":{ # 聚合查询
"sum_age":{ # 和的key
"sum":{ # 和
"field":"age" # 获取所有age的和
}
}
}
}
res = es.search(index=index_name, doc_type='doc', body=dsl) # 搜索所有数据,并获取所有age的和
print(res)
# 获取平均值
dsl = {
"query":{
"match_all":{}
},
"aggs":{ # 聚合查询
"avg_age":{ # 平均值的key
"sum":{ # 平均值
"field":"age" # 获取所有age的平均值
}
}
}
}
res = es.search(index=index_name, doc_type='doc', body=dsl)
print(res)
# from、size
dsl = {
"query":{
"match_all":{}
},
"size":"50",
"from":"0"
}
res = es.search(index=index_name, doc_type='doc', body=dsl)
print(res)
参考 ——
以上。
星星点点,凌凌碎碎艾。