1 介绍
官方文档:
https://www.elastic.co/guide/en/enterprise-search-clients/python/7.17/index.html
pypi文档:
https://pypi.org/project/elasticsearch/7.17.0/
2 安装 连接
pip install elasticsearch==7.17.0
异步 async/await
pip install elasticsearch[async]==7.17.0
from elasticsearch import Elasticsearch
client = Elasticsearch(hosts=['http://192.168.56.20:9200'],
http_auth=("elastic", "密码"))
3 索引操作
3.1 创建索引
def create_index(index, doc, index_id):
client.create(index=index, document=doc, id=index_id)
doc = {
"mappings": {
"properties": {
"name": {
"type": "text"
},
"age": {
"type": "long"
},
"birthday": {
"type": "date"
}
}
}
}
create_index("test6", doc, "1")
3.2 判断索引是否存在
def index_id_exists(index, id):
return client.exists(index=index, id=id)
if index_id_exists("test1", "2") == True:
print("索引存在")
else:
print("索引不存在")
4 新增数据
def add_to_es(index, doc, id):
# 重复添加,数据覆盖
try:
client.index(index=index, document=doc, id=id)
return '1'
except Exception as e:
print(e)
return '0'
doc = {
"name": "灰太狼",
"age": 22,
"birthday":"2000-02-02",
"tags": ["男"]
}
res = add_to_es("test1", doc, "10")
5 删除数据
def delete_by_index_and_id(index, id):
try:
res = client.delete(index=index, id=id)
print(res['_shards']['successful'])
return '1'
except Exception as e:
print(e)
return '0'
# 删除数据
if delete_by_index_and_id("test1", "1") == "1":
print("删除成功")
else:
print("删除失败或不存在")
5 修改数据
def update_by_index_and_id(index, id, doc):
try:
client.update(index=index, id=id, doc=doc)
return '1'
except Exception as e:
print(e)
return '0'
doc = {
"name": "有勇气的牛排",
"age": 22,
"birthday": "2000-05-20",
"tags": ["男"]
}
res = update_by_index_and_id("test1", "1", doc=doc)
if res == "1":
print("更新成功")
else:
print("数据不存在")
6 查询数据
6.1 查询所有数据
def find_by_index_and_id(index, id):
try:
res = client.get(index=index, id=id)
return res
except Exception as e:
print(e)
return '0'
res = find_by_index_and_id("test1", "1")
print(res)
6.2 search数据
def find_search_article(index, key, source, highlight=None):
"""
:param index: 索引 source = ["a_title"]
:param query: query
:param source: 取出的字段
:param highlight: 高亮
:return:
"""
# should: 条件满足一个即可
query = {"bool": {"should": [{"match": {"a_title": key}}, {"match": {"a_content": key}}]}}
# query = {"bool": {"should": [{"match": key}]}}
client = connect_elk()
try:
res = client.search(index=index, query=query, _source=source, highlight=highlight)
return res
except Exception as e:
print(e)
return '0'
res = find_search_article("article", "人民教育", ["a_title","a_html"], highlight_red())
if res != 0:
print(res["hits"])
total = res["hits"]["total"]["value"]
res = res["hits"]["hits"]