ES已经很普及了,最近又从无到有实践,又遇到很多问题。
特此总结。
1、以前
以前Spring项目,专用ES,不用SpringData。
很早的版本。
2、今天的一些坑
3.1 先打算用 SpringBoot+SpringData+ES
本地没有配置任何ES,结果竟然能 成功索引和查询(从网上找的一个例子)。
找了半天,本地自动启动1个。
把本地地址改为远程地址,死活连不上。
有人说是版本问题,但是我本地ES已经用到6.x还是不行。
各种方法尝试,不行。
联想到Redis,有绑定ip的功能,是不是ES默认不让远程访问?
修改network.host参数,绑定ip,增加自己的ip,es启动失败。
这让我想到去看日志。
看日志的过程中,发现:
exception caught on transport layer [Netty4TcpChannel{localAddress=/192.168.162.239:9300,
remoteAddress=/172.16.20.103:50514}], closing connection
java.lang.IllegalStateException: Received message from unsupported version: [2.0.0] minimal compatible version is: [6.8.0]
发现问题了,确认是 本地ES版本太低导致。
3.2 升级ES版本
又发现各种类找不到。
网上找的例子,大概是说启动的时候,某个类找不到,然后根据类名去搜,确实搜不到。
可能是高版本,被移除了。
3.3 网上又学习一大圈
一同事Python连ES,直接用的Http Rest方式。
网上学习过程中,发现ES的连接方式有很多种,传统的client方式好像不太行了,经常遇到版本不匹配的问题。
未来的趋势是:使用 HTTP rest方式。
又找了Rest方式的示例,一顿折腾,勉强能用。
存在一些小问题:API被弃用了。@Deprecated
代码写得逻辑不清晰,又是一顿小改。
控制台还有一些警告:
2019-10-29 14:18:49.859 [demo] [I/O dispatcher 1] WARN [org.elasticsearch.client.RestClient] -request [PUT http://19.168.16.239:9200/company/employee/12?timeout=1m] returned 1 warnings:
[299 Elasticsearch-7.2.0-508c38a "[types removal] Specifying types in document index requests is deprecated, use the typeless endpoints instead (/{index}/_doc/{id}, /{index}/_doc, or /{index}/_create/{id})."]
2019-10-29 14:18:50.031 [demo] [I/O dispatcher 1] WARN [org.elasticsearch.client.RestClient] -request [GET http://192.18.12.239:9200/company/employee/12] returned 1 warnings:
[299 Elasticsearch-7.2.0-508c38a "[types removal] Specifying types in document get requests is deprecated, use the /{index}/_doc/{id} endpoint instead."]
这次先简单写写,心路历程。
继续研究完整可用Demo,再分享出来。