當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
SpringBoot-高级-检索-整合SpringDataElasticsearch
生活随笔
收集整理的這篇文章主要介紹了
SpringBoot-高级-检索-整合SpringDataElasticsearch
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前面整合Jest技術,9200端口來操作ES,接下來整合SpringBoot ES模塊,我們從pom文件把SpringData打開,<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>這Jest來留在這,然后我們來配置一下,來到配置文件里面,前面這個是Jest的配置,SpringData的ES在SpringData里面,一個是節點的名字,還有一個是節點的信息http://59.110.158.145:9200/{"name" : "Clint Barton","cluster_name" : "elasticsearch","cluster_uuid" : "PDTFBfQpSRuPYlwdKI7e-Q","version" : {"number" : "2.4.6","build_hash" : "5376dca9f70f3abef96a77f4bb22720ace8240fd","build_timestamp" : "2017-07-18T12:17:44Z","build_snapshot" : false,"lucene_version" : "5.5.4"},"tagline" : "You Know, for Search"
}spring.data.elasticsearch.cluster-name=elasticsearch主機地址加上9300,spring.data.elasticsearch.cluster-nodes=59.110.158.145:9300把這個配上以后直接啟動但是我們發現這有報錯,他說Connection refused,連接拒絕,是什么問題呢,我們這個節點傳輸有問題,這問題的原因在哪,我們來給大家說一下,我們看SpringData引入的ES相關的模塊,來往下翻,ES用的是246版本,而我們的ES是569版本,ES版本有可能不合適,我們需要找到一個合適的SPRING DATA版本才行,我們來參照官方文檔,我們來搜索一下SpringData我們來到SPRING的官網,我們來看他們是怎么來進行版本適配的https://spring.io/projects/spring-data-elasticsearch我們來打開他的文檔https://docs.spring.io/spring-data/elasticsearch/docs/2.1.23.RELEASE/reference/html/這塊有一個Version ControlVersion Control - https://github.com/spring-projects/spring-data-elasticsearch這塊有一個表格
版本適配說明,我們當前SPRING BOOT,版本關系來給大家分析一下,我們主要來看Spring-data-elasticsearch,這個starter和SpringBoot一樣1.5.12版本,這個starter引的SpringData看一下,它是211版本,我來看一下他的適配關系,2.11是2版本的,他都是和ES2.幾版本適配的,所以我們現在有兩種辦法,解決這個問題,第一種我們換SpringBoot的版本,換更高版本,來支持我們5版本的ES,另外我們就來安裝2版本的ES,那我們就在這來說一下,這一塊特別要注意,如果版本不適配,兩個辦法,第一個,升級springboot版本,第二個,來安裝對應版本的ES,我就不來升級SpringBoot版本了,因為升級也不一定正合適我們569版本,我們就來安裝一個合適的ES,現在的ES是246,那我們就來安裝246的ES,我們從docker.hub里面來搜一下,elasticsearch,我們來看一下官方鏡像里面有沒有246的版本https://hub.docker.com/_/elasticsearch看一下標簽,這里有246的版本https://hub.docker.com/_/elasticsearch?tab=tags我們就連上Linux虛擬機,我們docker就來裝一個246的ES,首先我們來看docker images這個ES開始下載的是新版本的,接下來我們docker pull來下載一個246的,還是用這個鏡像加速docker pull registry.docker-cn.com/library/elasticsearch:2.4.6我們發現有ES246的鏡像
接下來我們繼續安裝,我們來設置他的兩個大小,一個是-Xms,我們設成256,還有-Xmx也是設置成256,把兩個設置以后呢,-d后臺運行,-p我們來暴露端口,虛擬機9200已經有了,我們把9201映射到9200,包括繼續-p,把虛擬機的9301映射到9300,--name第二個ES就叫做ES02,把這個鏡像ID復制過來docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9201:9200 -p 9301:9300 --name ES02 6027f8323b96
我們用docoer ps來看一下
http://59.110.158.145:9201/{"name" : "Master Khan","cluster_name" : "elasticsearch","cluster_uuid" : "tUfnw7UkTGCS_nKeWH1gHw","version" : {"number" : "2.4.6","build_hash" : "5376dca9f70f3abef96a77f4bb22720ace8240fd","build_timestamp" : "2017-07-18T12:17:44Z","build_snapshot" : false,"lucene_version" : "5.5.4"},"tagline" : "You Know, for Search"
}我們2.4.6版本的就裝上了,再來修改一下之前的配置,不叫9300,叫9301spring.data.elasticsearch.cluster-name=elasticsearch
spring.data.elasticsearch.cluster-nodes=59.110.158.145:9301我們看現在他是否還報錯,我們發現在這啟動成功Setting server pool to a list of 1 servers: [http://59.110.158.145:9200]而且這里顯示添加到節點9301adding transport node : 59.110.158.145:9301那要怎么用呢,大家可以參照官方文檔,我們先來測第一種,我們先寫一個ElasticSearchRepository的子接口,我要給ES里面存儲數據呢,自己就來寫一個Repository,我們這個接口寫上,我們就叫BookRepository,假設我們要存儲Book類型的數據,extends ElasticsearchRepository<Book, Integer>,他需要兩個泛型,第一個泛型是我們要存取數據的泛型,第二個是組件的類型,這跟我們JPA的用法一樣,比如我們就來寫一個Bean,這個Bean就是Book,Book里面有一些屬性,我們就來測試一下給Book中保存數據,book作為一個文檔存在哪個索引哪個類型下,一定要標注,所以我們在Book類上標注一個注解@Document(indexName="china",type="book")注意這是Elastic的注解,這里面有一個叫indexName,我們存儲的索引名字,我們就存在china下,還有一個叫type,類型我們就叫book,我們把所有的book都存在book類型下,然后我在這繼續來測試,我們發現這里有運行成功,我們來查一下book下面的所有的數據,我來查一個_searchhttp://59.110.158.145:9201/china/book/1{"_index":"china","_type":"book","_id":"1","_version":1,"found":true,"_source":{"bookName":"西游記","author":"吳承恩","id":1}
}
package com.learn.repository;import java.util.List;import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;import com.learn.bean.Book;public interface BookRepository extends ElasticsearchRepository<Book, Integer> {public List<Book> findByBookNameLike(String bookName);
}
package com.learn.bean;import org.springframework.data.elasticsearch.annotations.Document;@Document(indexName="china",type="book")
public class Book {private String bookName;private String author;private Integer id;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public Book() {super();}public Book(String bookName, String author) {super();this.bookName = bookName;this.author = author;}public String getBookName() {return bookName;}public void setBookName(String bookName) {this.bookName = bookName;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}@Overridepublic String toString() {return "Book [bookName=" + bookName + ", author=" + author + ", id=" + id + "]";}}
/** Copyright 2013-2016 the original author or authors.** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the License at** http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/
package org.springframework.data.elasticsearch.repository;import java.io.Serializable;import org.elasticsearch.index.query.QueryBuilder;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.core.query.SearchQuery;
import org.springframework.data.repository.NoRepositoryBean;/*** @param <T>* @param <ID>* @author Rizwan Idrees* @author Mohsin Husen*/
@NoRepositoryBean
public interface ElasticsearchRepository<T, ID extends Serializable> extendsElasticsearchCrudRepository<T, ID> {<S extends T> S index(S entity);Iterable<T> search(QueryBuilder query);Page<T> search(QueryBuilder query, Pageable pageable);Page<T> search(SearchQuery searchQuery);Page<T> searchSimilar(T entity, String[] fields, Pageable pageable);void refresh();Class<T> getEntityClass();
}
http://59.110.158.145:9201/china/book/_search{
"took":53,
"timed_out":false,
"_shards":{"total":5,"successful":5,"failed":0},
"hits":{"total":1,"max_score":1.0,
"hits":[
{ "_index":"china","_type":"book","_id":"1","_score":1.0,"_source":{"bookName":"西游記","author":"吳承恩","id":1}
}
]}}
我們就發現有id為1的,我們直接來查Book,一般的增刪改查BookRepository里面都有,比如有計數,刪除,保存,搜索,包括他也支持寫自定義方法public List<Book> findByBookNameLike(String bookName);就是模糊查詢的,傳入bookName,就寫好方法名就行了,不用寫實現,我們就默認去ES中找圖書,按照書名來給我們模糊查詢,來測試一下,看能不能查出西游記Book [bookName=西游記, author=吳承恩, id=1]@AutowiredBookRepository bookRepository;@Testpublic void test02() {
// Book book = new Book();
// book.setId(1);
// book.setBookName("西游記");
// book.setAuthor("吳承恩");
// bookRepository.index(book);List<Book> list = bookRepository.findByBookNameLike("游");for (Book book : list) {System.out.println(book);}}大家可以來參考官方文檔https://docs.spring.io/spring-data/elasticsearch/docs/2.1.23.RELEASE/reference/html/
#repositories.query-methodshttps://docs.spring.io/spring-data/elasticsearch/docs/2.1.23.RELEASE/reference/html/
#elasticsearch.misc.filter
?
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的SpringBoot-高级-检索-整合SpringDataElasticsearch的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringBoot高级-检索-Spri
- 下一篇: SpringBoot高级-任务-异步任务