win10+springboot + elasticsearch
1. 本地安装es ---我选择的是elasticsearch-7.14.2......
下载安装包 : https://www.elastic.co/cn/downloads/elasticsearch , 最新版本的直接选择机器环境即可下载 , 如需要其他版本的 , 点击右侧view past release 查看历史版本进行下载即可 . 如下 :
2.解压出来后进入,config目录,修改elasticsearch.yml文件配置变量
# ======================== Elasticsearch Configuration ========================= # ---------------------------------- Cluster ----------------------------------- # # 集群名 cluster.name: my-es # # ------------------------------------ Node ------------------------------------ # # 节点名 node.name: cloudtravel-es # 节点是否有资格被选举为node default = true.默认集群中的第一台机器为master.若该节点挂了将会重新选举 node.master: true # 指定该节点是否存储索引数据 .default=true node.data: true # # Add custom attributes to the node: # #node.attr.rack: r1 # # # ----------------------------------- Paths ------------------------------------ # # 配置文件的存储路径 . 不设置默认就是根目录的config文件夹 # path.data: D:/software/elasticSearch/elasticsearch-7.14.2/config # # 日志文件存储路径 不设置默认就是根目录的logs文件夹 # path.logs: D:/software/elasticSearch/elasticsearch-7.14.2/logs # # ----------------------------------- Memory ----------------------------------- # # 这个配置,锁定物理内存地址,防止elasticsearch内存被交换出去, # 也就是避免es使用swap交换分区,频繁的交换,会导致IOPS变高; bootstrap.memory_lock: true # ---------------------------------- Network ----------------------------------- # # 对外服务的http端口 . 默认为9200 http.port: 9200 http.cors.enabled: true http.cors.allow-origin: "*" # # For more information, consult the network module documentation. # # --------------------------------- Discovery ---------------------------------- # discovery.seed_hosts: ["127.0.0.1", "[::1]"] # # Bootstrap the cluster using an initial set of master-eligible nodes: # cluster.initial_master_nodes: ["cloudtravel-es"] # # ---------------------------------- Various ----------------------------------- # # Require explicit names when deleting indices: # #action.destructive_requires_name: true
3.es是自带jdk的 . 启动时会优先寻找Java_home . 这里强制指定es使用其版本自带的jdk .修改启动命令 : elasticsearch-env.bat[windows下] . 对比了下 , 我自己的jdk少了个conf文件夹 . 也就是少了security的作用 . 干啥用的还没搞明白 . 但是启动时会报当前版本不对啥的
4. 这时候进入bin目录执行elasticsearch.bat就可以启动了. 启动成功 . 如下 :看到started就表示启动成功了 . 其中 : transportservice指定的ip:端口即为我们Java代码中进行配置的ip和端口 . httpTransportService则是对外提供http服务时的ip:端口
这时候浏览器访问http://localhost:9200/ . 看到如下返回.就表示初步启动成功了
5. 配置为服务自启动 : elasticsearch的bin目录下有一个elasticsearch-service.bat
两个命令 : .\elasticsearch-service.bat install 将该es加载为服务 .\elasticsearch-service.bat start: 启动服务 后续window就可以直接通过服务列表直接控制开关了 . 不再需要一直开个黑窗口
6. 引入前端服务 : 为直观的看到es服务中的内容 . 这里引入界面化管理工具ElasticSearch-head
其源码托管于GitHub,地址为:https://github.com/mobz/elasticsearch-head
我这里是直接使用的node.js进行启动的 . node安装这里不再详细赘述 . 需要的自行百度 . elasticsearch-head下载到本地后 .
6.1. 解压 . 进入根目录下 , 执行npm install 初始化所需的node插件 .
6.2. 插件初始化完成后 , 执行npm run start启动前端服务 . 如下 :
6.3.这时候浏览器访问.http://localhost:9100/就可以直接看到当前es服务中的内容了 . 若es服务的ip:port换了 . 页面中也可以替换查询 . 如下 :
7. 代码中使用 说明 : 我这是在现有工程里接入的,所以一些其他配置比如db配置啥的就不贴了 . 挑重点了
7.1 pom引用 : 这里es的自动装配启动包版本和springboot的版本一致即可 .
<!-- 接入elasticsearch --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> <version>${springboot-starter.version}</version> </dependency>
7.2 资源文件配置 .可以单独创建一个es.yml也行 . 也可以直接在application.properties文件中进行配置.初步学习 , 就先最简单来了 .如下 :
# ************************** elasticsearch config **************************** # 这里的集群名要和所连接的es服务中配置的cluster-name一致
spring.data.elasticsearch.cluster-name=my-es
# 和启动成功后报的transportservice后提示的ip:端口一致即可 . 默认为9300
spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300
7.3 配置实体类 . 我用的是7.14.2版本 . 还是老原则, 学习先从能用起来开始 . 后续再更新复杂的用法
/** * es的index必须为小写 */ @Getter @Setter @AllArgsConstructor // lombok 包下 : 全参构造器 @NoArgsConstructor // lombok 包下 : 无参构造器 @Document(indexName = "user") // indexName只允许小写 public class BaseUserModel implements Serializable { private static final long serialVersionUID = 8283483377785895360L; @Id @Field(type = FieldType.Long) private Long id; private String bizId; private String tenantId; private Integer userType; @Field(type = FieldType.Text) private String userName; @Field(type = FieldType.Text) private String idNumber; private Integer idNumType; private Date gmtCreate; private Date gmtUpdate; private String templateId; }
7.4. 原来业务中已经有了在使用的dao方法了 . 这里可以专门定义一个服务于es的dao. 继承ElasticsearchRepository<BaseUserModel[上面配置的类] , Long[实体类中@id声明的属性的类型]>即可.这个类中提供了几个通用的增删查方法 .可以直接使用,如下 :
7.5 mock使用 : 查询数据库后结果同步至es . 业务上使用时 , 可直接进行事务同步 .
.........未完待续