当前位置:   article > 正文

ElasticSearch的python api以及dev tool方式的基本操作

ElasticSearch的python api以及dev tool方式的基本操作

一、环境要求

根据es服务器版本,下载es的python api包,我们这里的环境为:
python3.8,
下载的elastic search版本为7.6.0,安装方式:

pip install elasticsearch==7.6.0
  • 1

二、es操作及python代码

1、获取es实例,连接到es

如果没有额外的安全验证,需要指定的内容包括:集群ip地址(list类型),端口号(每个节点的端口号可能不同,这里是字符串,代表所有节点的端口号是一样的),用户名,密码。

class ElasticSearchHandler():
    def __init__(self, host: list, port: str, username: str, password: str):
        self.port = port
        self.host = host
        self.username = username
        self.password = password
        self.es = self.create()


    # 新建es实例,并返回
    def create(self) -> Elasticsearch:
        context = ssl._create_unverified_context()

        addrs = []
        for host in self.host:
            addr = {'host': host, 'port': self.port}
            addrs.append(addr)

        if self.username and self.password:
            elasticsearch = Elasticsearch(addrs, http_auth=(self.username, self.password), scheme="https", ssl_context=context)
        else:
            elasticsearch = Elasticsearch(addrs)
        return elasticsearch
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

2、es服务器的增删改查操作

1)创建一个index
    # 创建一个index,并定义index的mapping和结构
    def create_index(self, index_name, body):
        response = self.es.indices.create(index=index_name, body=body)
        print(response)
  • 1
  • 2
  • 3
  • 4

在devtool创建:

PUT /index1
{
    "mappings": {
        "properties": {
            "field1": {
                "type": "text"
            },
            "field2": {
                "type": "text"
            }
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
2)删除指定index
    def delete_index(self, index_name):
        res = self.es.indices.delete(index=index_name)
        print.info(res)

  • 1
  • 2
  • 3
  • 4

在devtool中删除

DELETE /my_index
  • 1
3)获取指定index的数据
    def get_all_data(self, index_name):
        query_body = {
            "query": {
            "match_all": {}
            }
        }
        response = self.es.search(index=index_name, body=query_body)
        return response
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

dev tool中执行

GET /myindex/_search
{
  "query": {
    "match_all": {}
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
4)数据写入,以bulk的方式
   # 以bulk的方式写入数据, 可以多条也可以一条
    def bulk_insert(self, index_name, bulk_data):
        response = self.es.bulk(index=index_name, body=bulk_data)
        print("Bulk operation response:", response)
       
 	 # 写入数据的格式为
  	# 子问题可能是多个,存储的是列表
	index_name = 'my_index'
	bulk_data = [
	{"index": {"_index": index_name}},
	{"field1": "value1", "field2": "value2", "field3": "value3"}
	]
	es_handler.bulk_insert(index_name=index_name, bulk_data=bulk_data)  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

在dev tool当中写入的话,格式为,下面的语句写入了两条记录:

POST vector_qt_greeting/_bulk   
{	"index": {"_index": "my_index"}}
{"field1": "value1", "field2": "value2"}
{	"index": {"_index": "my_index"}}
{"field1": "value3", "field2": "value4"}
  • 1
  • 2
  • 3
  • 4
  • 5
5)删除一条数据
    def delete_record(self, index_name , query_body):
        response = self.es.delete_by_query(index=index_name, body=query_body)
        return response


	index_name = 'my_index'
	body = {
	  "query":{
	    "term":{
	      "_id":1
	    }
	  }
	}
	es_handler.delete_record(index_name=index_name, bulk_data=body ) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

在dev tool当中写入的话,格式为:

POST my_index/_delete_by_query
{
  "query":{
    "term":{
      "_id":1
    }
  }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

三、条件查询

    def query_most_n_relate_index(self, index_name, query_field, query_content, size=1):
        body = {
            "size": size,
            "from": 0,
            "query": {
                "match": {
                    # "查询字段":  "查询内容"
                    query_field: query_content
                }
            }
        }
        result = self.es.search(index=index_name, body=body)
        return result
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

使用dev tool查询

GET /my_index/_search
{
            "size": 2,
            "from": 0,
            "query": {
                "bool":{
                "should":[
                {"match": {
                "field1": {
                    "query": "value1"
                }
                }}
                ]
                }
            }
        }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

es的查询方式很灵活,可以单独写一篇文章, 就先不列在这里面了,它可以模糊查询,可以计算文档距离,也可以精确查询,可以说非常丰富灵活。

附:dev tool是什么?如何使用?

在Elasticsearch的Dev Tools(Kibana Dev Tools)中删除索引是一个简单的过程。Kibana Dev Tools提供了一个用户友好的界面,允许你直接与Elasticsearch集群交互,执行各种操作,包括删除索引。

以下是使用Kibana Dev Tools删除指定索引的步骤:

  1. 打开Kibana:
    在你的Web浏览器中打开Kibana的Web界面。通常,Kibana运行在http://localhost:5601(如果你使用的是默认端口)。

  2. 进入Dev Tools:
    在Kibana的左侧菜单中找到“Dev Tools”(开发者工具)并点击进入。

  3. 选择索引:
    在Dev Tools界面的顶部,确保你已经选择了包含你想要删除的索引的Kibana空间或Elasticsearch索引模式。

  4. 编写Delete Index请求:
    在Dev Tools的右侧窗格中,编写一个HTTP DELETE请求来删除索引。例如,如果你要删除名为my_index的索引,请求应该如下所示:

    DELETE /my_index
    
    • 1

    只需将my_index替换为你想要删除的实际索引名称。

  5. 执行请求:
    编写完请求后,点击“Execute”(执行)按钮,Dev Tools将向Elasticsearch发送请求并删除指定的索引。

  6. 检查结果:
    执行完请求后,Dev Tools会显示响应结果。如果索引删除成功,响应体将包含一个确认信息。

如果你的Elasticsearch集群启用了安全性功能,你可能需要确保你的Kibana实例已经使用具有足够权限的用户进行了认证,以便能够执行删除索引的操作。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/597540
推荐阅读
相关标签
  

闽ICP备14008679号