ES基本使用方式

ES基本使用

重置es密码,初始用户elastic

elasticsearch-reset-password -u elastic

在这里插入图片描述

1.es的访问

使用URL访问

将用户名和密码拼接到 URL 中的格式为:

http://{username}:{password}@{host}:{port}/{api_path}

在这里插入图片描述

2.mapping的理解

Dynamic Mapping

如果创建的索引没有预先设计好的mapping,那么写入数据的时候会自动创建mapping。

dynamic: true

  • 写入{"new_field": "test"}时,若new_field未在Mapping中定义,ES会自动将其类型推断为text(主字段)和keyword(子字段)25。
  • 风险‌:可能导致“Mapping爆炸”(字段数量过多),影响集群性能和稳定性

dynamic: false

  • 新字段不会被索引,但数据会完整存储在_source中。
  • 结果‌:无法通过该字段进行搜索或聚合,但可通过_source获取原始值。
  • 适用场景‌:需保留原始数据但无需查询的场景,如日志存储

dynamic: strict

  • 写入包含未定义字段的文档会直接报错,数据无法入库。
  • 示例‌:返回错误提示"strict_dynamic_mapping_exception": "mapping set to strict"
  • 适用场景‌:需严格保证Mapping结构一致性的场景,如生产环境数据规范。

keyword 与 text的区别‌

基础定义与核心差异
特性text 类型keyword 类型
存储方式文本被分词器拆分后存储(如 "苹果手机"["苹果", "手机"]原样存储,不进行分词(如 "苹果手机" 整体存储)
查询场景支持全文搜索(模糊匹配、相似度排序)仅支持精确匹配、聚合、排序(如过滤状态码、分类标签)
分词处理默认使用标准分词器(可自定义如 ik_max_word不进行分词,视为单一词元
适用场景文章内容、商品描述等需模糊搜索的字段订单号、状态码、标签等需精确匹配的字段

keyword仅支持精准匹配

text支持模糊匹配

主字段,子字段

主字段支持模糊匹配,子字段支持精确查询

可以防止同一个字段创建连个独立字段

GET /products/_search {
  "query": {
    "match": { "product_name": "智能" }  // 主字段分词后匹配
  }
}

GET /products/_search {
  "query": {
    "term": { "product_name.raw": "iPhone 15" }  // 子字段精确匹配
  },
  "sort": [{ "product_name.raw": "asc" }]        // 按原始值排序
}

创建mapping

post请求创建模板,_template/模板名称

http://elastic:daJW9J=9loZ+L5Xa1XHX@127.0.0.1:9200/_template/my_template

参数说明

{
  //模板名称,index会自动匹配
  "index_patterns": ["mytest*"],   
    
  "settings": {
    //主分片数
    //将索引数据水平拆分到多个物理分片,实现分布式存储并行计算
    //影响索引写入吞吐量,一旦创建不可修改
    //按照每片300GB设置,设置后无法修改
    "number_of_shards": 3,
    //副本分片数
    //创造冗余副本,数据容灾+负载均衡
    //读取优化,副本数越多,查询并发处理能力越强,会额外占用资源,数据同步延迟
    "number_of_replicas": 1,
     //全局启用 字段格式错误容忍机制,数据类型不匹配时候,丢弃匹配失败字段,非拒绝整个文档
    "index.mapping.ignore_malformed": true
  },
    
 
  "mappings": {
    // 动态映射控制
    // strict 严格模式 禁止未声明字段写入
    // true(默认)自动推断并扩展添加映射(可能导致索引膨胀)
    // false 忽略新字段,保留原始数据不会索引(仅存储,不能搜索)(映射级别)
    "dynamic": "strict",
      
    "_source": {
      //控制是否存储原始json
      //true保留完整原始数据,支持数据更新、高亮显示、reindex 等操作
      //false不存储原始数据,节省存储空间,但无法通过 _update API 修改文档或使用
      "enabled": true,
      // 查询结果中不显示 filead1 和 filed2
      "excludes": ["filead1","filed2"], 
       // 启用压缩 
      //"compress": true                  
    },
     
    //用于定义文档中每个字段的数据类型,存储规则和检索
    "properties": {
      //字段名
      "host_name": {
        //数据类型
        "type": "keyword",
        //当字段类型为keyword的字符串长度超过设定值时,该字段不会被索引
        //无法通过该字段搜索或聚合,每个中文每个字符几计为1
        "ignore_above": 256,
        //空值替换
        "null_value": "N/A"
      },
      "created_at": {
        "type": "date",
         //确保正确解析字符串或数值为时间戳
        "format": "yyyy-MM-dd HH:mm:ss",
         //字段兼容错误模式开启
        "ignore_malformed": true
      },
      "data_info": {
        "type": "text",        // 主字段用于分词全文搜索
        "analyzer": "ik_max_word",  
        "fields": {
          "keyword": {         // 子字段用于精确匹配
            "type": "keyword",
            "ignore_above": 256
          }
        }
      },
      "data_info2": {
        "type": "text", 
        "fields": { "raw": { "type": "keyword" } }}
    }
  }
}

插入模板

{
 
  "index_patterns": ["ldsx_test*"],   
    
  "settings": {
   
    "number_of_shards": 3,
   
    "number_of_replicas": 1,
   
    "index.mapping.ignore_malformed": true
  },
  "mappings": {
    "dynamic": "true",
    "_source": {
      "enabled": "true"
    },
    "properties": {
     
      "data_name": {
        "type": "keyword",
        "ignore_above": 256,
        "null_value": "N/A"
      },
      "created_at": {
        "type": "date",
        "format": "yyyy-MM-dd HH:mm:ss",
        "ignore_malformed": true
        },
      "data_info": {
        "type": "text", 
        "fields": { "raw": { "type": "keyword" } }}
        
    }
  }
}

查看mapping列表

在这里插入图片描述

3.创建索引

已经创建模板后,索引根据模板名匹配mapping

http://elastic:daJW9J=9loZ+L5Xa1XHX@127.0.0.1:9200/要创建的索引名

在这里插入图片描述

如果创建索引无匹配模板创建时可以设置mapping

若未预先定义模板,索引会根据首次插入的数据自动推断字段类型,此时不会关联任何显式模板

在这里插入图片描述

mapping是空的

在这里插入图片描述

4.查看索引列表

http://elastic:daJW9J=9loZ+L5Xa1XHX@127.0.0.1:9200/_cat/indices

在这里插入图片描述

5.删除索引

http://elastic:daJW9J=9loZ+L5Xa1XHX@127.0.0.1:9200/索引名

在这里插入图片描述

6.添加数据

post请求添加

http://elastic:daJW9J=9loZ+L5Xa1XHX@127.0.0.1:9200/ldsx_test_2025.04.28/_doc

{
  "data_name": "node6",
  "created_at": "2025-04-28 15:05:31",
  "data_info":"无足鸟自由的飞翔"
}

在这里插入图片描述

7.查询数据

get请求,查询数据

http://elastic:daJW9J=9loZ+L5Xa1XHX@127.0.0.1:9200/ldsx_test_2025.04.28/_search

控制返回条数

_search?size=1,size设置需要返回条数

http://elastic:daJW9J=9loZ+L5Xa1XHX@127.0.0.1:9200/ldsx_test_2025.04.28/_search?size=1

在这里插入图片描述

Spring Data Elasticsearch 是一个基于 Spring Data 的 Elasticsearch 客户端,它提供了一组简单易用的 API,可以轻松地与 Elasticsearch 进行交互。使用 Spring Data Elasticsearch,您可以快速地构建出一个高效、可扩展的 Elasticsearch 应用程序。 Spring Data Elasticsearch使用方式如下: 1. 添加依赖 在 pom.xml 文件中添加以下依赖: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> ``` 2. 配置 Elasticsearch 在 application.properties 文件中添加以下配置: ``` spring.data.elasticsearch.cluster-name=my-application spring.data.elasticsearch.cluster-nodes=localhost:9300 ``` 3. 创建实体类 创建一个实体类,使用注解 @Document 标注该实体类对应的 Elasticsearch 索引名称和类型,使用注解 @Id 标注该实体类对应的 Elasticsearch 文档 ID。 ``` @Document(indexName = "my_index", type = "my_type") public class MyEntity { @Id private String id; private String name; private String description; // getters and setters } ``` 4. 创建 Elasticsearch 操作接口 创建一个 Elasticsearch 操作接口,继承 ElasticsearchRepository 接口,该接口提供了一组基本Elasticsearch 操作方法,如 save、delete、findById 等。 ``` public interface MyEntityRepository extends ElasticsearchRepository<MyEntity, String> { } ``` 5. 使用 Elasticsearch 操作接口 使用 MyEntityRepository 接口中提供的方法,对 Elasticsearch 进行操作。 ``` @Autowired private MyEntityRepository myEntityRepository; public void save(MyEntity myEntity) { myEntityRepository.save(myEntity); } public void delete(String id) { myEntityRepository.deleteById(id); } public MyEntity findById(String id) { Optional<MyEntity> optional = myEntityRepository.findById(id); return optional.orElse(null); } ``` 以上就是 Spring Data Elasticsearch 的详细使用方式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值