news 2026/5/15 3:34:24

ES 新手入门:10分钟搞定项目集成与基础使用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ES 新手入门:10分钟搞定项目集成与基础使用
    • 第一步:本地起一个 ES
    • 第二步:Java 项目引入依赖
    • 第三步:定义一个实体类
    • 第四步:写个 Repository
    • 第五步:试试写入和查询
    • 遇到的问题 & 小技巧
    • 最后说两句

最近我们团队开始在新项目里用 Elasticsearch(简称 ES),主要是为了做订单和用户的模糊搜索。以前用数据库 LIKE 查询,慢得要死,特别是数据量一大,用户搜个名字都卡半天。后来老大说:“试试 ES 吧,搞不好真香。” 我就硬着头皮上手了,结果发现——真的没那么难

这篇文章就是我踩坑后整理的“人话版”入门指南,不讲原理,只讲怎么快速跑起来。目标是:10 分钟内,让你的 Java 项目能往 ES 里写数据、也能查出来


第一步:本地起一个 ES

别一上来就想着集群、分片、副本。先本地跑起来再说。

我用的是 Docker,一行命令搞定:

docker run -d --name es -p9200:9200 -p9300:9300 -e"discovery.type=single-node"docker.elastic.co/elasticsearch/elasticsearch:8.12.0

注意:ES 8 默认开启安全认证,对新手不太友好。如果你只是本地测试,可以加个环境变量关掉:

-e"xpack.security.enabled=false"

跑起来后,浏览器访问http://localhost:9200,看到一堆 JSON 信息,说明 OK 了。


第二步:Java 项目引入依赖

我们用的是 Spring Boot,所以直接加 starter:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency>

然后在application.yml里配一下地址:

spring:elasticsearch:uris:http://localhost:9200

如果你关了安全认证,这样就行。如果开了,还得配用户名密码,但新手建议先关掉,省事。


第三步:定义一个实体类

假设我们要存“用户”信息,比如 ID、姓名、手机号、邮箱。

@Document(indexName="user")publicclassUser{@IdprivateStringid;privateStringname;privateStringphone;privateStringemail;// getter / setter 省略}

这里关键就两行:

  • @Document(indexName = "user"):告诉 ES,这个类对应 ES 里的user索引(你可以理解成“表”)。
  • @Id:主键,ES 会用它做文档 ID。

我们的经验是:字段名尽量用英文小写,别用下划线,避免映射出问题。


第四步:写个 Repository

Spring Data 给我们提供了超简单的操作方式:

publicinterfaceUserRepositoryextendsElasticsearchRepository<User,String>{// 按名字模糊搜List<User>findByNameContaining(Stringname);}

就这一行!继承ElasticsearchRepository,泛型填你的实体类和 ID 类型,CRUD 方法都有了。

那个findByNameContaining是 Spring Data 的命名规则,意思是“名字包含 xxx”。ES 会自动转成全文检索,不用写查询语句。


第五步:试试写入和查询

写个测试方法:

@SpringBootTestclassEsTest{@AutowiredprivateUserRepositoryuserRepository;@TestvoidsaveUser(){Useruser=newUser();user.setId("1");user.setName("张三");user.setPhone("13800138000");user.setEmail("zhangsan@example.com");userRepository.save(user);}@TestvoidsearchUser(){List<User>users=userRepository.findByNameContaining("张");users.forEach(System.out::println);}}

先跑saveUser(),再跑searchUser(),控制台应该能打出“张三”。

我认为:这比写 SQL 简单多了,尤其是模糊匹配,数据库要加%还可能走不到索引,ES 天然支持。


遇到的问题 & 小技巧

  1. 索引没自动创建?
    Spring Data 默认会在第一次 save 时自动建索引。但如果字段类型复杂(比如嵌套对象),可能需要手动建 mapping。新手先用简单字段,基本没问题。

  2. 中文搜不准?
    默认的分词器对中文不友好。比如搜“张三”,可能拆成“张”和“三”,但如果你搜“张三丰”,可能就匹配不上。
    我们的做法是:先用默认的跑通流程,等业务稳定了再单独处理中文分词(比如集成 ik 分词器)。别一上来就想完美,容易劝退。

  3. ID 到底用啥?
    我们一般用业务主键(比如用户 ID 字符串),而不是让 ES 自动生成。这样方便和数据库对齐。


最后说两句

ES 确实强大,但新手最容易犯的错就是“想一口吃成胖子”——又是调分片,又是搞高亮,又是聚合分析……结果连最基础的增删改查都没跑通。

在我看来,先让它跑起来,能用就行。等真遇到性能问题或功能瓶颈,再深入优化。大部分中小项目,用默认配置 + 简单查询,已经能解决 90% 的搜索需求了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/12 2:14:42

数据中台选型:一个决定数字化转型成败的战略决策

在数字化转型浪潮中&#xff0c;数据中台被普遍视为企业的“数据大脑”&#xff0c;承担着整合数据资产、释放数据价值、赋能业务创新的核心使命。然而&#xff0c;一个错误的选型决策所带来的影响&#xff0c;远不止是资金与时间的浪费。它可能导致企业陷入更深的数据孤岛——…

作者头像 李华
网站建设 2026/5/9 22:07:21

惊!北京口腔医院种植牙价目表大揭秘!

北京口腔医院种植牙价目表大揭秘引言近年来&#xff0c;随着人们生活水平的提高&#xff0c;对口腔健康及美观的要求也日益增长。种植牙作为现代口腔医学的杰出代表&#xff0c;已经成为众多缺失牙患者的首选修复方式。北京作为中国的首都&#xff0c;拥有众多高水平的口腔医院…

作者头像 李华
网站建设 2026/5/9 10:42:21

从月薪15K到年薪90W:AI产品经理凭啥逆袭?掌握这些大模型硬技能!

“AI产品经理是不是伪需求&#xff1f;”这个问题曾在去年引发热议&#xff0c;可如今的市场却给出了截然不同的答案。 根据脉脉高聘发布的《2025年度人才迁徙报告》&#xff0c;AI产品经理岗位量同比增幅高达369.36%&#xff0c;在所有岗位中增幅居首。 这个岗位不仅炙手可热…

作者头像 李华
网站建设 2026/5/12 16:24:01

Kotaemon能否实现角色扮演?虚拟助手人格化设置

Kotaemon能否实现角色扮演&#xff1f;虚拟助手人格化设置 在智能客服越来越普遍的今天&#xff0c;用户早已不再满足于“问一句答一句”的机械式交互。他们希望面对的不是一个冰冷的问答机器&#xff0c;而是一个有名字、有性格、懂共情、能记事的“数字人”——比如银行里那位…

作者头像 李华
网站建设 2026/5/9 21:48:08

Kotaemon能否接入微信公众号?完整对接方案出炉

Kotaemon能否接入微信公众号&#xff1f;完整对接方案出炉 在企业服务的数字化浪潮中&#xff0c;微信公众号早已不只是一个信息发布窗口——它承载着成千上万用户的咨询、投诉、预约和交易请求。然而&#xff0c;大多数公众号背后的“智能客服”仍停留在关键词匹配或固定话术的…

作者头像 李华
网站建设 2026/5/12 2:15:23

47、C中的反射、特性与动态编程

C#中的反射、特性与动态编程 1. 特性相关 特性(包括大多数预定义特性)通常出现在类定义中。例如, SerializableAttribute 对应于元数据表中的一个设置位,这使得它成为一个伪特性,即能在元数据表中设置位或字段的特性。 下面是 SerializableAttribute 的CIL示例: …

作者头像 李华