面试题答案
一键面试-
映射定义: 在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
。 -
文档写入: 写入包含自定义元数据的文档。
POST products/_doc { "product_name": "Widget A", "created_by": "JohnDoe", "priority": 2 }
此文档创建了一个名为
Widget A
的产品,由JohnDoe
创建,优先级为2。 -
查询操作: 使用自定义元数据进行查询。例如,查询由
JohnDoe
创建的产品。GET products/_search { "query": { "term": { "created_by": "JohnDoe" } } }
又如,查询优先级大于1的产品。
GET products/_search { "query": { "range": { "priority": { "gt": 1 } } } }
-
更新操作: 假设要更新由
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'" } }
这里通过自定义元数据筛选出符合条件的文档,然后使用脚本更新产品名称。
-
删除操作: 删除由
JohnDoe
创建且优先级小于3的产品文档。POST products/_delete_by_query { "query": { "bool": { "must": [ { "term": { "created_by": "JohnDoe" } }, { "range": { "priority": { "lt": 3 } } } ] } } }
通过自定义元数据筛选出要删除的文档并执行删除操作。