ES 新增字段和刪除字段


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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM