一、环境要求
根据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 = 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
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"}
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 )
在dev tool当中写入的话,格式为:
POST my_index/_delete_by_query
{
"query":{
"term":{
"_id":1
}
}
}
三、条件查询
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实例已经使用具有足够权限的用户进行了认证,以便能够执行删除索引的操作。