一、环境要求
根据es服务器版本,下载es的python api包,我们这里的环境为:
python3.8,
下载的elastic search版本为7.6.0,安装方式:
pip install elasticsearch==7.6.0
二、es操作及python代码
1、获取es实例,连接到es
如果没有额外的安全验证,需要指定的内容包括:集群ip地址(list类型),端口号(每个节点的端口号可能不同,这里是字符串,代表所有节点的端口号是一样的),用户名,密码。
class ElasticSearchHandler():def __init__(self, host: list, port: str, username: str, password: str):self.port = portself.host = hostself.username = usernameself.password = passwordself.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
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)
在devtool创建:
PUT /index1
{"mappings": {"properties": {"field1": {"type": "text"},"field2": {"type": "text"}}}
}
2)删除指定index
def delete_index(self, index_name):res = self.es.indices.delete(index=index_name)print.info(res)
在devtool中删除
DELETE /my_index
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
dev tool中执行
GET /myindex/_search
{"query": {"match_all": {}}
}
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)
在dev tool当中写入的话,格式为,下面的语句写入了两条记录:
POST vector_qt_greeting/_bulk
{ "index": {"_index": "my_index"}}
{"field1": "value1", "field2": "value2"}
{ "index": {"_index": "my_index"}}
{"field1": "value3", "field2": "value4"}
三、条件查询
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
使用dev tool查询
GET /my_index/_search
{"size": 2,"from": 0,"query": {"bool":{"should":[{"match": {"field1": {"query": "value1"}}}]}}}
es的查询方式很灵活,可以单独写一篇文章, 就先不列在这里面了,它可以模糊查询,可以计算文档距离,也可以精确查询,可以说非常丰富灵活。
附:dev tool是什么?如何使用?
在Elasticsearch的Dev Tools(Kibana Dev Tools)中删除索引是一个简单的过程。Kibana Dev Tools提供了一个用户友好的界面,允许你直接与Elasticsearch集群交互,执行各种操作,包括删除索引。
以下是使用Kibana Dev Tools删除指定索引的步骤:
-
打开Kibana:
在你的Web浏览器中打开Kibana的Web界面。通常,Kibana运行在http://localhost:5601
(如果你使用的是默认端口)。 -
进入Dev Tools:
在Kibana的左侧菜单中找到“Dev Tools”(开发者工具)并点击进入。 -
选择索引:
在Dev Tools界面的顶部,确保你已经选择了包含你想要删除的索引的Kibana空间或Elasticsearch索引模式。 -
编写Delete Index请求:
在Dev Tools的右侧窗格中,编写一个HTTP DELETE请求来删除索引。例如,如果你要删除名为my_index
的索引,请求应该如下所示:DELETE /my_index
只需将
my_index
替换为你想要删除的实际索引名称。 -
执行请求:
编写完请求后,点击“Execute”(执行)按钮,Dev Tools将向Elasticsearch发送请求并删除指定的索引。 -
检查结果:
执行完请求后,Dev Tools会显示响应结果。如果索引删除成功,响应体将包含一个确认信息。
如果你的Elasticsearch集群启用了安全性功能,你可能需要确保你的Kibana实例已经使用具有足够权限的用户进行了认证,以便能够执行删除索引的操作。