Python3 操作ES7

Python3 操作ES7

 

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)
 
  • 1

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)
 
posted @ 2024-02-01 16:41  小学弟-  阅读(94)  评论(0编辑  收藏  举报