python操作Elasticsearch7.17.0

x33g5p2x  于2022-06-27 转载在 Python  
字(3.0k)|赞(0)|评价(0)|浏览(391)

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"]

参考文档:
https://www.cnblogs.com/lshan/p/15510018.html

相关文章