目錄
ES 指定索引增加字段
首先創建一個索引
PUT /indexname # indexname = zq_test
{
"mappings": {
"properties": {
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"age": {
"type": "long",
"index": true
},
"gender": {
"type": "keyword"
}
}
}
}
查看創建好的索引
GET /zq_test
{
"zq_test": {
"aliases": {},
"mappings": {
"properties": {
"addr": {
"type": "integer"
},
"age": {
"type": "long"
},
"event_engine_count": {
"type": "integer"
},
"gender": {
"type": "keyword"
},
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
},
"settings": {
"index": {
"creation_date": "1623333220789",
"number_of_shards": "1",
"number_of_replicas": "1",
"uuid": "zWmXJeCSQsaI83JrJ3wJLA",
"version": {
"created": "7060099"
},
"provided_name": "zq_test"
}
}
}
}
增加新的字段
PUT /zq_test/_mapping
{
"properties": {
"hight": {
"type": "integer"
}
}
}
再次查看索引
GET /zq_test
{
"zq_test": {
"aliases": {},
"mappings": {
"properties": {
"addr": {
"type": "integer"
},
"age": {
"type": "long"
},
"event_engine_count": {
"type": "integer"
},
"gender": {
"type": "keyword"
},
"hight": {
"type": "integer"
},
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
},
"settings": {
"index": {
"creation_date": "1623333220789",
"number_of_shards": "1",
"number_of_replicas": "1",
"uuid": "zWmXJeCSQsaI83JrJ3wJLA",
"version": {
"created": "7060099"
},
"provided_name": "zq_test"
}
}
}
}
嵌套節點下面新增字段
PUT /zq_test/_mapping
{
"properties": {
"school": {
"type": "keyword",
"norms": false,
"doc_values": false
},
"teacher": {
"type": "nested",
"properties": {
"rightStatus": {
"type": "keyword",
"norms": false,
"doc_values": false
},
"rightCurrTime": {
"type": "keyword",
"norms": false,
"doc_values": false
}
}
}
}
}
對應新的索引信息
{
"zq_test": {
"aliases": {},
"mappings": {
"properties": {
"addr": {
"type": "integer"
},
"age": {
"type": "long"
},
"event_engine_count": {
"type": "integer"
},
"gender": {
"type": "keyword"
},
"hight": {
"type": "integer"
},
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"school": {
"type": "keyword",
"doc_values": false
},
"teacher": {
"type": "nested",
"properties": {
"rightCurrTime": {
"type": "keyword",
"doc_values": false
},
"rightStatus": {
"type": "keyword",
"doc_values": false
}
}
}
}
},
"settings": {
"index": {
"creation_date": "1623333220789",
"number_of_shards": "1",
"number_of_replicas": "1",
"uuid": "zWmXJeCSQsaI83JrJ3wJLA",
"version": {
"created": "7060099"
},
"provided_name": "zq_test"
}
}
}
}
對應 python
方法
from threading import BoundedSemaphore
from elasticsearch import Elasticsearch
# elasticsearch集群服務器的地址
# 創建elasticsearch客戶端
es = Elasticsearch(
"127.0.0.1:9200",
# # 啟動前嗅探es集群服務器
# sniff_on_start=True,
# # es集群服務器結點連接異常時是否刷新es節點信息
# sniff_on_connection_fail=True,
# # 每60秒刷新節點信息
# sniffer_timeout=60
)
def add_field(index, body):
"""將現有 index 增加一個字段
Args:
index (str): 索引名稱
body (dict): 查詢體同上 PUT /zq_test/_mapping
"""
return es.indices.put_mapping(index=index, body=body)
ES 刪除字段
ES 已經建立好的索引數據,無法直接刪除一個字段。除非新建索引。但是我們通過文檔刪除字段。通過腳本更新的方式,刪除設計文檔中的字段內容,達到該字段數據為 None
的形式
刪除指定文檔中所有的某一個字段數據
body = {
"script": f"ctx._source.remove('{field}')",
"query": {
"bool": {
"must": [
{
"exists": {
"field": field
}
}
]
}
}
}
es.update_by_query(index, body)