????????Spring Data Elasticsearch是Spring Boot套件中的一個(gè)組件,在Spring Boot中連接ES可以使用Spring Data Elasticsearch。
????????Spring Data Elasticsearch是Spring Data項(xiàng)目的一部分,該項(xiàng)目致力于提供一致的基于Spring的數(shù)據(jù)查詢和存儲(chǔ)編程模型。
????????Spring Data Elasticsearch封裝了創(chuàng)建客戶端的邏輯并與服務(wù)端保持長連接,讓我們不必關(guān)注于網(wǎng)絡(luò)連接問題。并且,通過對Repository接口的自動(dòng)實(shí)現(xiàn),Spring Data Elasticsearch可以直接通過方法名的語義實(shí)現(xiàn)查詢功能,如常見的findBy+字段名+操作。
????????Spring Data Elasticsearch還具有OR-Mapping功能,即查詢到數(shù)據(jù)后,可以將數(shù)據(jù)直接封裝到自定義的POJO中,方便后續(xù)對數(shù)據(jù)進(jìn)行加工處理。
示例:
一、創(chuàng)建Springboot項(xiàng)目,導(dǎo)入依賴
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
</dependency>
</dependencies>
二、在application.yml中配置ES連接信息
spring:
elasticsearch:
uris: http://localhost:9200
username: ""
password: ""
????????其中,uris、username和password項(xiàng)需要填寫協(xié)調(diào)節(jié)點(diǎn)服務(wù)地址(IP地址+端口號(hào))、用戶名和密碼。當(dāng)有多個(gè)協(xié)調(diào)節(jié)點(diǎn)時(shí),可以設(shè)置uris的值為多個(gè)協(xié)調(diào)節(jié)點(diǎn)的服務(wù)地址,中間用逗號(hào)分隔。
????????至此,當(dāng)項(xiàng)目啟動(dòng)時(shí)Spring Data Elasticsearch就會(huì)創(chuàng)建客戶端,然后連接ES服務(wù)端并與其保持長連接。
三、Spring Boot客戶端搜索文檔
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
@Document(indexName = "hotel")
@Data
public class Hotel {
@Id
String id;
String title;
String city;
String price;
}
????????在上面的代碼中,在ID字段中添加了一個(gè)注解@Id。注意,一個(gè)Spring Data Elasticsearch的POJO必須定義一個(gè)被@Id修飾的字段,它是和索引中的_id相對應(yīng)的。當(dāng)搜索完成時(shí),Spring Data Elasticsearch會(huì)將該P(yáng)OJO的字段填充為搜索結(jié)果顯示的數(shù)據(jù),包括ID字段(填充為文檔的_id值)。
????????EsRepository定義為接口,它需要繼承CrudRepository接口。在EsRepository接口中,可以按照業(yè)務(wù)需求定義方法,Spring Data Elasticsearch會(huì)自動(dòng)找到其類庫中合適的實(shí)現(xiàn)類。EsRepository的定義代碼如下:
import org.springframework.data.repository.CrudRepository;
import java.util.List;
public interface EsRepository extends CrudRepository<Hotel,String> {
List<Hotel> findByTitle(String title);
}
????????在EsRepository中定義了findByTitle()方法,Spring Data Elasticsearch會(huì)自動(dòng)根據(jù)方法名稱識(shí)別出方法的具體邏輯,然后生成Bean并填充邏輯代碼實(shí)現(xiàn)該方法。
????????完成EsRepository的定義后,在Service中就可以定義EsRepository類型的成員變量了,由Spring Boot完成注入,在getHotelByTitle()方法中調(diào)用EsRepository的對應(yīng)方法完成搜索。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class EsService {
@Autowired
EsRepository esRepository;
public List<Hotel> getHotelByTitle(String title){
return esRepository.findByTitle(title);
}
}
????????Controller的實(shí)現(xiàn)部分,URL還是只映射到/testEs。在Controller中,使用EsService搜索到結(jié)果以后直接將其打印到網(wǎng)頁上。EsController的實(shí)現(xiàn)代碼如下:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class ESController {
@Autowired
EsService esService;
@RequestMapping("/testEs")
public String getTitle(){
List<Hotel> hotels = esService.getHotelByTitle("java");
if(hotels!=null&&hotels.size()>0){
return hotels.toString();
}else{
return "no data";
}
}
}
啟動(dòng)程序后,在瀏覽器中輸入http://localhost:8080/testEs,結(jié)果如下圖所示。
文章來源:http://www.zghlxwxcb.cn/news/detail-622738.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-622738.html
到了這里,關(guān)于Spring Data Elasticsearch介紹(七)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!