springboot 配置elasticsearch Java High Rest Client


前提聲明

在新版本的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)
    }
}
// 懶得截取就全貼出來吧~~

個人理解,不作為教程,歡迎交流指正!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM