Spring BootとKotlinを統合した全文検索エンジンElasticsearchのコード例
7047 ワード
Elasticsearchは全文検索では無敵です。ビッグデータの中にもツリーがあります。完全に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はサポートされていません。
以下はスプリングdata elasticsearchとelasticsearchの対応バージョンです。
spring data elasticsearch
elasticsearch
3..00.RC 2
5..0
3..00.M 4
5.4.0
2.0.4.RELEASE
2.4.0
2.0.RELEASE
2.2.0
1.4.0.M 1
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.0.6で、spring bootは1.5.6で、Elasticsearch 5.0以上のバージョンをサポートしているspring data elasticsearchはまだRELEASEバージョンではありません。私たちが採用しているのはelasticsearch Java clientの方式です。しかし、今はより良い方法を紹介します。私が書いた「Elasticsearch Java Researt APIマニュアル」https://gitee.com/quanke/elasticsearch-java-restを参考にしてもいいです。しかし、この文章はやはりelasticsearch Java clientを使います。
Spring Boot Kotlinプロジェクトを構築する
プロジェクトの構築に問題がある場合は、前の記事「Spring BootとKotlinを使ってRESTfull APIを作成する」を参考にしてください。
Graadleを使って構築し、build.gradleファイルに追加します。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
この文章は簡単にSpring BootがKotlin言語で接続操作するElasticsearchを紹介します。しかし、詳細には紹介されません。ElasticsearchのJava/kotlinでの使用を深く理解するには、私が以前書いた「Elasticsearch Java APIマニュアル」https://gitee.com/quanke/elasticsearch-java/を参考にしてください。
Elasticsearchを全く知らないなら、Elasticsearchサービスをインストールしてください。
Elasticsearchとの接続方法は様々です。
以下はスプリングdata elasticsearchとelasticsearchの対応バージョンです。
spring data elasticsearch
elasticsearch
3..00.RC 2
5..0
3..00.M 4
5.4.0
2.0.4.RELEASE
2.4.0
2.0.RELEASE
2.2.0
1.4.0.M 1
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.0.6で、spring bootは1.5.6で、Elasticsearch 5.0以上のバージョンをサポートしているspring data elasticsearchはまだRELEASEバージョンではありません。私たちが採用しているのはelasticsearch Java clientの方式です。しかし、今はより良い方法を紹介します。私が書いた「Elasticsearch Java Researt APIマニュアル」https://gitee.com/quanke/elasticsearch-java-restを参考にしてもいいです。しかし、この文章はやはりelasticsearch Java clientを使います。
Spring Boot Kotlinプロジェクトを構築する
プロジェクトの構築に問題がある場合は、前の記事「Spring BootとKotlinを使ってRESTfull APIを作成する」を参考にしてください。
Graadleを使って構築し、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"
}
まずテストベースのElasticsearch Cientを書きます。
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: 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 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")// index
.setTypes("tweet")//
.setQuery(qb) // Query
.get()
println(response)
}
}
私たちはdayu-spring-boot-starter-esを書きました。以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。