python 操作es
pip install elasticsearch
连接建立
from elasticsearch import Elasticsearch
es = Elasticsearch([{
'host': "127.0.0.1", 'port': 1234}],
timeout=30, max_retries=10, retry_on_timeout=True,
http_auth=("user", "password"))es 一般都是集群方式,第一个变量是一个集群ip:port的数组,当然还有其他的写法
http_auth 是开启http认证的服务,需要填上用户密码
创建索引
es.indices.create(index="indexName",
body={"settings": {"number_of_replicas": 1, "number_of_shards": 5, "max_result_window": 50000}})number_of_replicas指定有多少个副本 ,number_of_shards索引要做多少个分片
body 可以是空字典,都采用默认值
删除索引
es.indices.delete(index="indexName")
判断索引是否存在
es.indices.exists(index="indexName")
设置mapping
mapping = {
"properties": {
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"password": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
es.indices.put_mapping(body=mapping, index="indexName")设置别名
es.indices.put_alias(index="indexName", name="indexAlias")
删除别名
es.indices.delete_alias(index="indexName", name="indexAlias")
查询数据
query = {
"query": {
# 范围查询
"range": {
"字段1": {}
},
# 关键字匹配查询
"match": {
"字段1": ""
},
# 查询所有文档
"match_all": {
"字段1": ""
},
# 多字段搜索
"multi_match": {
"query": "",
"fields": ["字段1", "字段2"]
},
# 多字段搜索,与multi_match区别是真正的包含搜索的目标,
"match_phrase": {
"字段": ""
},
# 查询满足条件的文档,是相等关系不是包含关系
"term": {
"字段1": ""
},
# 多个条件 terms: 查询 xx = “xx” 或 xx = “yy”
"terms": {
"字段1": ["xx", "yy"]
},
# bool 查询 must, must_not, should
"bool": {
"must": [
{"term条件1"}, {"term条件2"}
],
"must_not": [],
"should": [],
"filter": []
}
},
"_source": {"includes": []},
"from": 0,
"size": 10
}
es.search(index="indexName", body=query)查询的query 只需要其中的一两项就行,根据实际情况选择查询的条件方式
插入数据
message={
"_index": es_index,
"_type": es_type,
"_id": id,
"_source":{
"字段1":"123",
"字段2":"223",
"字段3":"323",
}
}
es.index(index=index, doc_type=type, body=message["_source"])
# 批量更新 常用
from elasticsearch import helpers
action = []
action.append(
{"_index": "",
"_type": "",
"_source": {}}
)
helpers.bulk(es, action)更新数据
es.update(index=index, doc_type=type, body=message["_source"])
删除数据
es.delete_by_query(index='indexName', body=query)