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

公主嶺網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)建站,公主嶺網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為公主嶺上千多家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的公主嶺做網(wǎng)站的公司定做!
這篇文章簡(jiǎn)單介紹Spring Boot使用Kotlin語(yǔ)言連接操作 Elasticsearch。但是不會(huì)做很詳細(xì)的介紹,如果要深入了解Elasticsearch在Java/kotlin中的使用,請(qǐng)參考我之前編寫(xiě)的《Elasticsearch Java API 手冊(cè)》 https://gitee.com/quanke/elasticsearch-java/ 里面包含使用實(shí)例,包含我們使用踩過(guò)的坑。
如果完全不了解Elasticsearch請(qǐng)先了解,安裝好Elasticsearch服務(wù)
有多種方式連接Elasticsearch
需要注意的是,如果使用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 而且支持 Elasticsearch6.0 以上的版本的 spring data elasticsearch 還不是 RELEASE 版本,所有我們采用的是 elasticsearch Java client 的方式,但是現(xiàn)在官方推薦更好的方式可以參考我寫(xiě)的《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)把所有的類(lèi)設(shè)置open類(lèi)插件
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"
}
先寫(xiě)測(cè)試基類(lèi) 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í)例的名稱(chēng)
.put("client.transport.sniff", true) //自動(dòng)嗅探整個(gè)集群的狀態(tài),把集群中其他ES節(jié)點(diǎn)的ip添加到本地的客戶(hù)端列表中
.build()
/**
* 這里的連接方式指的是沒(méi)有安裝x-pack插件,如果安裝了x-pack則參考 [ElasticsearchXPackClient]
* 1. java客戶(hù)端的方式是以tcp協(xié)議在9300端口上進(jìn)行通信
* 2. http客戶(hù)端的方式是以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è)類(lèi)型
.setQuery(qb) // Query 查詢(xún)條件
.get()
println(response)
}
}
我們寫(xiě)了一個(gè) dayu-spring-boot-starter-es ,有機(jī)會(huì)開(kāi)源出來(lái)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。
本文名稱(chēng):SpringBoot與Kotlin整合全文搜索引擎Elasticsearch的示例代碼
網(wǎng)頁(yè)URL:http://www.chinadenli.net/article10/gjoigo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)、商城網(wǎng)站、網(wǎng)站內(nèi)鏈、網(wǎng)站改版、App設(shè)計(jì)、App開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)