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

网友投稿 368 2023-02-21


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

Elasticsearch 在全文搜索里面基本是无敌的,在大数据里面KKSgIMKb也很有建树,完全可以当nosql(本来也是nosql)使用。

这篇文章简单介绍Spring Boot使用Kotlin语言连接操作 Elasticsearch。但是不会做很详细的介绍,如果要深入了解Elasticsearch在java/kotlin中的使用,请参考我之前编写的《Elasticsearch Java API 手册》 https://gitee.com/quanke/elasticsearch-java/ 里面包含使用实例,包含我们使用踩过的坑。

如果完全不了解Elasticsearch请先了解,安装好Elasticsearch服务

有多种方式连接Elasticsearch

Spring Data Elasticsearch

elasticsearch Java client

其他第三方库

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

下面是spring data elasticsearch 和elasticsearch对应的版本

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 的方式,但是现在官方推荐更好的方式可以参考我写的《Elasticsearch Java Rest API 手册》 https://gitee.com/quanke/elasticsearch-java-rest ,但是这篇文章还是使用 elasticsearch Java client

构建Spring Boot Kotlin 项目

如果构建项目有问题的您,可以参考我之前的文章《使用Spring Boot和Kotlin创建RESTfull API》

使用 Gradle 构建,在 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的默认无参构造函数,默认把所有的类设置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"

}

先写测试基类 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的初始化

* 作为一个外部访问者,请求ES的集群,对于集群而言,它是一个外部因素。

* 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") //设置ES实例的名称

.put("client.transport.sniff", true) //自动嗅探整个集群的状态,把集群中其他ES节点的ip添加到本地的客户端列表中

.build()

/**

* 这里的连接方式指的是没有安装x-pack插件,如果安装了x-pack则参考 [ElasticsearchXPackClient]

* 1. java客户端的方式是以tcp协议在9300端口上进行通信

* 2. http客户端的方式是以http协议在9200端口上进行通信

*/

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:KKSgIMKb SearchResponse) {

val searchHits = searchResponse.hits.hits

for (searchHit in searchHits) {

println(JSON.toJSONString(searchHit.source, SerializerFeature.PrettyFormat))

}

}

}

运行单元测试

import org.elasticsearch.index.query.QueryBuilders.matchAllQuery

import orghttp://.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")//可以是多个index

.setTypes("tweet")//可以是多个类型

.setQuery(qb) // Query 查询条件

.get()

println(response)

}

}

我们写了一个 dayu-spring-boot-starter-es ,有机会开源出来


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:api接口管理 开源(api接口管理源码)
下一篇:关于通讯接口的测试用例的信息
相关文章

 发表评论

暂时没有评论,来抢沙发吧~