MST

星途 面试题库

面试题:ElasticSearch 文档操作延伸之自定义元数据

如何在ElasticSearch文档操作中为文档添加自定义元数据,并在后续查询、更新、删除操作中利用这些元数据进行更灵活的控制?请举例说明具体的映射定义、文档写入及操作过程。
35.0万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试
  1. 映射定义: 在Elasticsearch中,可以通过定义映射(mapping)来指定文档结构,包括自定义元数据字段。假设我们有一个products索引,要为每个产品文档添加created_by(创建者)和priority(优先级)作为自定义元数据。

    PUT products
    {
      "mappings": {
        "properties": {
          "product_name": {
            "type": "text"
          },
          "created_by": {
            "type": "keyword"
          },
          "priority": {
            "type": "integer"
          }
        }
      }
    }
    

    这里product_name是产品名称,created_by为自定义元数据表示创建者,类型为keyword适合精确匹配,priority为优先级,类型为integer

  2. 文档写入: 写入包含自定义元数据的文档。

    POST products/_doc
    {
      "product_name": "Widget A",
      "created_by": "JohnDoe",
      "priority": 2
    }
    

    此文档创建了一个名为Widget A的产品,由JohnDoe创建,优先级为2。

  3. 查询操作: 使用自定义元数据进行查询。例如,查询由JohnDoe创建的产品。

    GET products/_search
    {
      "query": {
        "term": {
          "created_by": "JohnDoe"
        }
      }
    }
    

    又如,查询优先级大于1的产品。

    GET products/_search
    {
      "query": {
        "range": {
          "priority": {
            "gt": 1
          }
        }
      }
    }
    
  4. 更新操作: 假设要更新由JohnDoe创建且优先级为2的产品的名称。

    POST products/_update_by_query
    {
      "query": {
        "bool": {
          "must": [
            {
              "term": {
                "created_by": "JohnDoe"
              }
            },
            {
              "term": {
                "priority": 2
              }
            }
          ]
        }
      },
      "script": {
        "source": "ctx._source.product_name = 'Widget B'"
      }
    }
    

    这里通过自定义元数据筛选出符合条件的文档,然后使用脚本更新产品名称。

  5. 删除操作: 删除由JohnDoe创建且优先级小于3的产品文档。

    POST products/_delete_by_query
    {
      "query": {
        "bool": {
          "must": [
            {
              "term": {
                "created_by": "JohnDoe"
              }
            },
            {
              "range": {
                "priority": {
                  "lt": 3
                }
              }
            }
          ]
        }
      }
    }
    

    通过自定义元数据筛选出要删除的文档并执行删除操作。