前提聲明
在新版本的spring boot
中逐漸放棄了對Spring Data Elasticsearch
的支持,所以不推薦使用,使用ES
官方推出的Java High Rest Client
.
引入依賴
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.3.2</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>7.3.2</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.3.2</version>
</dependency>
我們用到的只是elasticsearch-rest-high-level-client
,但這三個都要有,不然就會報錯。我最初沒有加入elasticsearch-rest-client
,提示
Caused by: java.lang.NoClassDefFoundError: org/elasticsearch/action/admin/indices/analyze/AnalyzeRequest
查閱官方文檔發現了它們之間有依賴關系:
Dependenciesedit
The High Level Java REST Client depends on the following artifacts and their transitive dependencies:
org.elasticsearch.client:elasticsearch-rest-client
org.elasticsearch:elasticsearch
而且版本號盡量一致,不一致可能會導致某些api不可用。
說明一下,這個項目我在用的時候版本號最新的是8.0了,但因為我docker
安裝的版本是7.3.2,所以都改成了一樣的,大家有個參考。
application.yml配置
spring
elasticsearch:
rest:
uris: http://192.168.0.1:9200
簡單使用
貼一段代碼給大家看一下吧,官網都有的,相應轉換一下就可以了,我的只是參考一下,歡迎指正。
/**
* @author Gyyyang
* @date 2019/7/23
*/
@Repository
class VehicleAlarmSaveRepositoryImpl @Autowired constructor(
private var client: RestHighLevelClient
):VehicleAlarmSaveRepository {
private val logger = LoggerFactory.getLogger("saveAlarm")
private val response = object : ActionListener<IndexResponse> {
override fun onFailure(exception: Exception) {
exception.printStackTrace()
}
override fun onResponse(response: IndexResponse) {
logger.info("CH:報警索引建立成功 EN:alarm Index create success")
}
}
override fun saveAlarm(alarmMessage: VehicleAlarmMessage) {
val message = JSON.toJSONString(alarmMessage)
val indexRequest = IndexRequest("vehicle-alarm").source(message,XContentType.JSON)
client.indexAsync(indexRequest, RequestOptions.DEFAULT,response)
}
}
// 懶得截取就全貼出來吧~~
個人理解,不作為教程,歡迎交流指正!