最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Boot與Kotlin 整合全文搜索引擎Elasticsearch的示例代碼

 更新時(shí)間:2018年01月27日 16:07:56   作者:quanke  
本篇文章主要介紹了Spring Boot與Kotlin 整合全文搜索引擎Elasticsearch的示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

Elasticsearch 在全文搜索里面基本是無(wú)敵的,在大數(shù)據(jù)里面也很有建樹(shù),完全可以當(dāng)nosql(本來(lái)也是nosql)使用。

這篇文章簡(jiǎn)單介紹Spring Boot使用Kotlin語(yǔ)言連接操作 Elasticsearch。但是不會(huì)做很詳細(xì)的介紹,如果要深入了解Elasticsearch在Java/kotlin中的使用,請(qǐng)參考我之前編寫的《Elasticsearch Java API 手冊(cè)》 https://gitee.com/quanke/elasticsearch-java/ 里面包含使用實(shí)例,包含我們使用踩過(guò)的坑。

如果完全不了解Elasticsearch請(qǐng)先了解,安裝好Elasticsearch服務(wù)

有多種方式連接Elasticsearch

  1. Spring Data Elasticsearch
  2. elasticsearch Java client
  3. 其他第三方庫(kù)

需要注意的是,如果使用Spring Data Elasticsearch,spring boot 1.5++版本的不支持最新版本的elasticsearch。

下面是spring data elasticsearch 和elasticsearch對(duì)應(yīng)的版本

spring data elasticsearch elasticsearch
3.0.0.RC2 5.5.0
3.0.0.M4 5.4.0
2.0.4.RELEASE 2.4.0
2.0.0.RELEASE 2.2.0
1.4.0.M1 1.7.3
1.3.0.RELEASE 1.5.2
1.2.0.RELEASE 1.4.4
1.1.0.RELEASE 1.3.2
1.0.0.RELEASE 1.1.1

我們使用的 Elasticsearch 版本是 5.5.6 , spring boot 使用的版本是 1.5.6 而且支持 Elasticsearch5.0 以上的版本的 spring data elasticsearch 還不是 RELEASE 版本,所有我們采用的是 elasticsearch Java client 的方式,但是現(xiàn)在官方推薦更好的方式可以參考我寫的《Elasticsearch Java Rest API 手冊(cè)》 https://gitee.com/quanke/elasticsearch-java-rest ,但是這篇文章還是使用 elasticsearch Java client

構(gòu)建Spring Boot Kotlin 項(xiàng)目

如果構(gòu)建項(xiàng)目有問(wèn)題的您,可以參考我之前的文章《使用Spring Boot和Kotlin創(chuàng)建RESTfull API》

使用 Gradle 構(gòu)建,在 build.gradle 文件中添加

dependencies {
 compile "org.elasticsearch:elasticsearch:$elasticsearch_version"
 compile "org.elasticsearch.client:transport:$elasticsearch_version"
}

完整的 build.gradle 文件

group 'name.quanke.kotlin'
version '1.0-SNAPSHOT'
buildscript {
 ext.kotlin_version = '1.2.10'
 ext.spring_boot_version = '1.5.4.RELEASE'
 ext.springfox_swagger2_version = '2.7.0'
 ext.mysql_version = '5.1.21'
 ext.mybatis_version = '1.1.1'
 ext.elasticsearch_version = '5.5.1'
 ext.fastjson_version = '1.2.7'
 repositories {
  mavenCentral()
 }
 dependencies {
  classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
  classpath("org.springframework.boot:spring-boot-gradle-plugin:$spring_boot_version")

//  Kotlin整合SpringBoot的默認(rèn)無(wú)參構(gòu)造函數(shù),默認(rèn)把所有的類設(shè)置open類插件
  classpath("org.jetbrains.kotlin:kotlin-noarg:$kotlin_version")
  classpath("org.jetbrains.kotlin:kotlin-allopen:$kotlin_version")
 }
}

apply plugin: 'kotlin'
apply plugin: "kotlin-spring" // See https://kotlinlang.org/docs/reference/compiler-plugins.html#kotlin-spring-compiler-plugin
apply plugin: 'org.springframework.boot'
apply plugin: "kotlin-jpa" //https://stackoverflow.com/questions/32038177/kotlin-with-jpa-default-constructor-hell
jar {
 baseName = 'chapter11-6-8-service'
 version = '0.1.0'
}
repositories {
 mavenCentral()
}

dependencies {
 compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version"
 compile("org.jetbrains.kotlin:kotlin-reflect:${kotlin_version}")
 compile "org.springframework.boot:spring-boot-starter-web:$spring_boot_version"
 compile "org.elasticsearch:elasticsearch:$elasticsearch_version"
 compile "org.elasticsearch.client:transport:$elasticsearch_version"
 compile "com.alibaba:fastjson:$fastjson_version"
 compile "org.apache.commons:commons-lang3:3.6"
 testCompile "org.springframework.boot:spring-boot-starter-test:$spring_boot_version"
 testCompile "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version"

}

compileKotlin {
 kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
 kotlinOptions.jvmTarget = "1.8"
}

先寫測(cè)試基類 ElasticsearchClient

import com.alibaba.fastjson.JSON
import com.alibaba.fastjson.serializer.SerializerFeature
import org.elasticsearch.action.search.SearchResponse
import org.elasticsearch.client.transport.TransportClient
import org.elasticsearch.common.settings.Settings
import org.elasticsearch.common.transport.InetSocketTransportAddress
import org.elasticsearch.transport.client.PreBuiltTransportClient
import org.junit.After
import org.junit.Before
import java.net.InetAddress

/**
 * Elasticsearch 5.5.1 的client 和 ElasticsearchTemplate的初始化
 * 作為一個(gè)外部訪問(wèn)者,請(qǐng)求ES的集群,對(duì)于集群而言,它是一個(gè)外部因素。
 * Created by http://quanke.name on 2017/11/10.
 */
open class ElasticsearchClient {

 protected var client: TransportClient? = null
 @Before
 @Throws(Exception::class)
 fun setUp() {
  val esSettings = Settings.builder()
    .put("cluster.name", "utan-es") //設(shè)置ES實(shí)例的名稱
    .put("client.transport.sniff", true) //自動(dòng)嗅探整個(gè)集群的狀態(tài),把集群中其他ES節(jié)點(diǎn)的ip添加到本地的客戶端列表中
    .build()

  /**
   * 這里的連接方式指的是沒(méi)有安裝x-pack插件,如果安裝了x-pack則參考 [ElasticsearchXPackClient]
   * 1. java客戶端的方式是以tcp協(xié)議在9300端口上進(jìn)行通信
   * 2. http客戶端的方式是以http協(xié)議在9200端口上進(jìn)行通信
   */
  client = PreBuiltTransportClient(esSettings)
    .addTransportAddress(InetSocketTransportAddress(InetAddress.getByName("192.168.1.10"), 9300))

  println("ElasticsearchClient 連接成功")
 }

 @After
 @Throws(Exception::class)
 fun tearDown() {
  if (client != null) {
   client!!.close()
  }

 }

 protected fun println(searchResponse: SearchResponse) {
  val searchHits = searchResponse.hits.hits
  for (searchHit in searchHits) {
   println(JSON.toJSONString(searchHit.source, SerializerFeature.PrettyFormat))
  }
 }
}

運(yùn)行單元測(cè)試

import org.elasticsearch.index.query.QueryBuilders.matchAllQuery
import org.junit.Test
import org.junit.runner.RunWith
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.test.context.junit4.SpringRunner
/**
 * Created by http://quanke.name on 2018/1/9.
 */
@RunWith(SpringRunner::class)
@SpringBootTest
class ApplicationTests : ElasticsearchClient() {

 @Test
 fun `es test"`() {
  val qb = matchAllQuery()
  val response = client!!.prepareSearch("twitter")//可以是多個(gè)index
    .setTypes("tweet")//可以是多個(gè)類型
    .setQuery(qb) // Query 查詢條件
    .get()
  println(response)
 }
}

我們寫了一個(gè) dayu-spring-boot-starter-es ,有機(jī)會(huì)開(kāi)源出來(lái)

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中StringUtils工具類的一些用法實(shí)例

    Java中StringUtils工具類的一些用法實(shí)例

    這篇文章主要介紹了Java中StringUtils工具類的一些用法實(shí)例,本文著重講解了isEmpty和isBlank方法的使用,另外也講解了trim、strip等方法的使用實(shí)例,需要的朋友可以參考下
    2015-06-06
  • Java并發(fā)之synchronized實(shí)現(xiàn)原理深入理解

    Java并發(fā)之synchronized實(shí)現(xiàn)原理深入理解

    這篇文章主要介紹了Java中synchronized實(shí)現(xiàn)原理詳解,涉及synchronized實(shí)現(xiàn)同步的基礎(chǔ),Java對(duì)象頭,Monitor,Mark Word,鎖優(yōu)化,自旋鎖等相關(guān)內(nèi)容,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • hibernate關(guān)于session的關(guān)閉實(shí)例解析

    hibernate關(guān)于session的關(guān)閉實(shí)例解析

    這篇文章主要介紹了hibernate關(guān)于session的關(guān)閉實(shí)例解析,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • Java使用openOffice對(duì)于word的轉(zhuǎn)換及遇到的問(wèn)題解決

    Java使用openOffice對(duì)于word的轉(zhuǎn)換及遇到的問(wèn)題解決

    開(kāi)發(fā)過(guò)程中經(jīng)常會(huì)使用java將office系列文檔轉(zhuǎn)換為PDF, 一般都使用微軟提供的openoffice+jodconverter 實(shí)現(xiàn)轉(zhuǎn)換文檔,下面這篇文章主要給大家介紹了關(guān)于Java通過(guò)openOffice對(duì)于word的轉(zhuǎn)換及遇到問(wèn)題的解決方法,需要的朋友可以參考下
    2018-09-09
  • 詳細(xì)講解Java抽象類示例

    詳細(xì)講解Java抽象類示例

    這篇文章主要介紹了 Java抽象類示例,抽象類通常用于定義一些公共的方法和屬性,但是這些方法沒(méi)有具體的實(shí)現(xiàn),需要的朋友可以參考下
    2023-05-05
  • Java Mybatis架構(gòu)設(shè)計(jì)深入了解

    Java Mybatis架構(gòu)設(shè)計(jì)深入了解

    在本篇文章里小編給大家整理的是一篇關(guān)于Java Mybatis架構(gòu)設(shè)計(jì)詳解內(nèi)容,對(duì)此有興趣的朋友們可以參考下,希望能夠給你帶來(lái)幫助
    2021-11-11
  • Java監(jiān)聽(tīng)POST請(qǐng)求的示例詳解

    Java監(jiān)聽(tīng)POST請(qǐng)求的示例詳解

    要監(jiān)聽(tīng)POST請(qǐng)求,我們可以使用Java中的HttpServlet類,以下是一個(gè)使用Servlet API監(jiān)聽(tīng)POST請(qǐng)求的完整示例,通過(guò)代碼示例講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-12-12
  • Java類加載異常:java.lang.ClassNotFoundException解決方法

    Java類加載異常:java.lang.ClassNotFoundException解決方法

    這篇文章主要給大家介紹了關(guān)于Java類加載異常:java.lang.ClassNotFoundException的解決方法,異常是Java編程語(yǔ)言中的一個(gè)標(biāo)準(zhǔn)異常類,它繼承自類,當(dāng)在運(yùn)行時(shí)嘗試加載類時(shí),如果系統(tǒng)找不到指定的類文件就會(huì)拋出該異常,需要的朋友可以參考下
    2023-11-11
  • Java的Spring框架中bean的繼承與內(nèi)部bean的注入

    Java的Spring框架中bean的繼承與內(nèi)部bean的注入

    這篇文章主要介紹了Java的Spring框架中bean的繼承與內(nèi)部bean的注入,Spring框架是Java的SSH三大web開(kāi)發(fā)框架之一,需要的朋友可以參考下
    2015-12-12
  • 玩轉(zhuǎn)SpringBoot2快速整合攔截器的方法

    玩轉(zhuǎn)SpringBoot2快速整合攔截器的方法

    這篇文章主要介紹了玩轉(zhuǎn)SpringBoot2快速整合攔截器的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09

最新評(píng)論

黄陵县| 喜德县| 新疆| 德庆县| 东丰县| 乡宁县| 灵璧县| 上饶市| 新邵县| 通山县| 丰顺县| 湖南省| 吴江市| 喀喇沁旗| 金山区| 永康市| 逊克县| 苗栗市| 通江县| 江陵县| 巴南区| 叙永县| 沂水县| 赤峰市| 平塘县| 铅山县| 泾阳县| 唐河县| 乌鲁木齐市| 盐山县| 吴旗县| 高平市| 赤壁市| 秀山| 南乐县| 翼城县| 苍山县| 天全县| 宁夏| 布拖县| 台中市|