ES常用API总结



本文内容部分使用AI生成技术

目的

本文总结了关于ES从安装到一些常见的关于ES的API使用示例,方便可以后面快速查询使用。

一、下载安装ES

1.下载:
下载地址
2.安装
下载完成后解压,并执行以下命令启动:

# 执行解压后目录下的 /bin/elasticsearch 命令启动
> /Users/mac/Downloads/elasticsearch-9.2.3/bin/elasticsearch 

3.登录
浏览器输入:https://localhost:9200/
账号:elastic
密码:复制日志中打印的密码:

Password for the elastic user (reset with `bin/elasticsearch-reset-password -u elastic`):
  lvxxxxxxxxxx

4.安装 Chrome ElasticVue 扩展程序(可选)
5.解决SSL报错(可选)
关闭后不用使用https访问

vim elasticsearch.yml
修改:
# 关闭安全功能
xpack.security.enabled: false
# 关闭 HTTP 层的 SSL
xpack.security.http.ssl.enabled: false

6.安装ik分词器插件

二、ES使用

主要分为两大类别:
1.对索引(相当于数据库的DDL)的操作
2.对文档(相当于数据库的DML)的操作

1、ES索引

创建索引

PUT /product/_mapping
{
  "mappings": {
    "properties": {
      "product_name": { 
        "type": "text",  // 【规则】Text类型:用于全文搜索。存入“华为Mate60 Pro”会被分词为【华为、Mate60、Pro】。
        "analyzer": "ik_max_word",  // 使用IK中文分词
        "fields": {     // 多字段特性:一个字段以两种方式索引。
          "keyword": { 
            "type": "keyword"  // 【规则】Keyword类型:用于精确匹配、聚合、排序。存入的是完整的“华为Mate60 Pro”字符串。
          }
        }
      },
      "brand": { 
        "type": "keyword" // 品牌名通常用于精确过滤(如`品牌=小米`)或聚合统计,故用keyword。
      },
      "price": { "type": "float" },
      "title": {
          "type": "text",
          "analyzer": "ik_max_word",  // 使用IK中文分词
          "search_analyzer": "ik_smart"
      },
      "create_time": {
          "type": "date",
          "format": "yyyy-MM-dd HH:mm:ss"
      },
      "tags": { "type": "keyword" }  // 标签也适合精确匹配和聚合。精确值,用于过滤、聚合
    }
  },
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 2
  }
}

2、ES文档

添加文档

// 1. 创建单个文档 (指定ID)
PUT /product/_doc/1
{ "product_name": "华为Mate60 Pro", "brand": "华为", "price": 6999, "tags": ["手机", "旗舰", "新品"] ,
"title": "小米手机", "create_time": "2023-10-01 12:00:00"}

// 2. 批量操作(高效增删改)
POST /_bulk
{"index":{"_index":"product","_id":"2"}}
{"product_name":"iPhone 15","brand":"苹果","price":5999,"tags":["手机","iOS"],
"title": "苹果手机", "create_time": "2024-10-01 12:00:00"}
{"index":{"_index":"product","_id":"3"}}
{"product_name":"小米13 Ultra","brand":"小米","price":6499,"tags":["手机","相机", "旗舰"],
"title": "苹果手机", "create_time": "2025-10-01 12:00:00"}

查询文档(重点)

规则对应查询类型应用场景与示例
match: 对查询词分词,模糊匹配match, multi_match在商品名称、描述中进行关键词搜索。
term: 不对查询词分词,精确匹配term, terms对keyword字段进行精确筛选,如品牌、状态码、标签。
bool: 组合多个查询条件bool组合 必须满足(must)、应该满足(should)、必须不满足(must_not)和过滤(filter) 条件。
must: 必须满足,参与算分嵌套在 bool 内影响结果相关度排序的核心条件。
filter: 必须满足,不参与算分嵌套在 bool 内用于结构化数据过滤(范围、状态),不关心相关性,性能更优。
should: 应该满足(或逻辑)嵌套在 bool 内实现“或”逻辑,常与 minimum_should_match 配合。
must_not: 必须不满足嵌套在 bool 内排除不需要的数据。

查询嵌套优先级:
query -> bool -> must/filter/should -> term/terms/match
其中:
must/filter/should 决定了是否对文档进行分词以及是否计算得分
term/terms/match 则控制查询关键词是否进行分词处理

简单查询
# 基础匹配查询
GET /product/_search
{
  "query": {
    "match": {
      "title": "小米手机"
    }
  },
  "from": 0,
  "size": 10
}

# 多字段搜索
GET /product/_search
{
  "query": {
    "multi_match": {
      "query": "小米",
      "fields": ["title", "brand^2"]  // brand字段权重加倍
    }
  }
}

复杂查询

# 精确过滤与范围查询
GET /product/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "title": "手机" } }
      ],
      "filter": [
        { "term": { "brand": "小米" } },
        { "range": { "price": { "gte": 3000, "lte": 5000 } } },
        { "exists": { "field": "tags" } }
      ]
    }
  }
}

# 复杂布尔组合
GET /product/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "title": "手机" } }
      ],
      "should": [
        { "term": { "tags": "新品" } },
        { "range": { "price": { "lte": 4000 } } }
      ],
      "minimum_should_match": 1,
      "must_not": [
        { "term": { "brand": "苹果" } }
      ]
    }
  }
}

# 指标与分组聚合
GET /product/_search
{
  "size": 0,
  "aggs": {
    "price_stats": {
      "stats": { "field": "price" }  // 统计: 计数、总和、平均、最小、最大
    },
    "group_by_brand": {
      "terms": { "field": "brand" },  // 按品牌分组
      "aggs": {
        "avg_price": { "avg": { "field": "price" } }  // 每个品牌的平均价格
      }
    },
    "price_histogram": {
      "histogram": {
        "field": "price",
        "interval": 1000,
        "extended_bounds": { "min": 0, "max": 10000 }
      }
    }
  }
}

# 时间范围统计
GET /product/_search
{
  "size": 0,
  "aggs": {
    "sales_over_time": {
      "date_histogram": {
        "field": "create_time",
        "calendar_interval": "month",
        "format": "yyyy-MM"
      },
      "aggs": {
        "total_sales": { "sum": { "field": "price" } }
      }
    }
  }
}

# 全文检索(高亮显示)
GET /product/_search
{
  "query": {
    "match": { "title": "智能手机" }
  },
  "highlight": {
    "fields": {
      "title": {
        "pre_tags": ["<em>"],
        "post_tags": ["</em>"]
      }
    }
  }
}

参考文档:
https://www.elastic.co/docs/reference/elasticsearch/rest-apis#documenthttpswww.elastic.codocsapidocelasticsearchv9groupendpoint-document

<think>嗯,用户想了解如何在Postman中使用ElasticsearchAPI。首先,我需要确认用户对Elasticsearch和Postman的基本了解程度。可能他们刚开始接触,所以要从基础开始解释。 首先,ElasticsearchAPI主要是基于REST的,所以需要先说明HTTP方法,比如GET、POST、PUT、DELETE。然后,Postman是用来发送这些请求的工具,用户可能需要安装和配置它。 接下来,需要分步骤说明具体操作。比如,如何连接到Elasticsearch实例,可能需要设置基本认证或者API密钥,特别是如果他们的实例有安全保护的话。然后,举几个常见的API例子,比如集群健康检查、创建索引、添加文档、搜索文档等。 每个例子要详细说明请求方法、URL结构、请求体和可能的响应。例如,创建索引使用PUT方法,添加文档用POST,而搜索用GET或POST。同时要注意JSON格式的正确性,以及路径中的变量替换,比如索引名和文档ID。 还要提醒用户注意常见的细节,比如Content-Type头必须设置为application/json,否则请求可能会失败。另外,Elasticsearch版本不同可能会有差异,需要确认他们的版本是否兼容某些API。 用户可能会有疑问,比如如何处理认证错误或者连接问题,这时候需要建议检查网络设置、认证信息和Elasticsearch的日志。可能还需要提到使用Kibana的Dev Tools作为替代,但Postman更适合API测试和管理。 最后,总结一下步骤,确保结构清晰,方便用户一步步操作。如果有必要,补充一些高级操作,比如批量插入或复杂查询,但可能超出了当前问题的范围,可以建议他们查阅官方文档了解更多。</think>以下是如何通过Postman向Elasticsearch发送API请求的逐步说明: 1. **基础配置** - 启动Elasticsearch服务(默认端口9200) - 打开Postman,新建请求标签页 - 设置请求头:`Content-Type: application/json` 2. **常用API操作示例** **示例1:检查集群健康状态** ``` 请求方法:GET URL:http://localhost:9200/_cluster/health 响应示例: { "cluster_name": "elasticsearch", "status": "green", "timed_out": false } ``` **示例2:创建索引** ``` 请求方法:PUT URL:http://localhost:9200/my_index 请求体(可选设置): { "settings": { "number_of_shards": 1 } } ``` **示例3:添加文档** ``` 请求方法:POST URL:http://localhost:9200/my_index/_doc 请求体: { "title": "测试文档", "content": "这是通过Postman插入的内容", "timestamp": "2023-07-20" } ``` **示例4:搜索文档** ``` 请求方法:GET URL:http://localhost:9200/my_index/_search 请求体: { "query": { "match": { "content": "Postman" } } } ``` 3. **注意事项** - 安全集群需添加认证头: ```Authorization: Basic <base64编码的用户名:密码>``` - 使用路径参数时注意格式: ```PUT /index_name/_doc/id``` - 复杂查询建议使用POST方法发送查询DSL - 调试时可先通过Kibana Dev Tools验证语法 4. **常见问题排查** - 响应状态码400:检查JSON语法是否正确 - 连接失败:确认Elasticsearch服务状态和端口 - 权限拒绝:检查安全设置和认证信息 - 版本兼容性:注意不同ES版本的API差异 建议结合Elasticsearch官方REST API文档使用: https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值