中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring Boot整合Elasticsearch如何實現全文搜索引擎

發布時間:2021-07-20 11:29:04 來源:億速云 閱讀:185 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關Spring Boot整合Elasticsearch如何實現全文搜索引擎的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

簡單說,ElasticSearch(簡稱 ES)是搜索引擎,是結構化數據的分布式搜索引擎。Elastic Search是一個開源的,分布式,實時搜索和分析引擎。Spring Boot為Elasticsearch及Spring Data Elasticsearch提供的基于它的抽象提供了基本的配置。Spring Boot提供了一個用于聚集依賴的spring-boot-starter-data-elasticsearch 'StarterPOM'。

引入spring-boot-starter-data-elasticsearch依賴,在pom.xml配置文件中增加如下內容(基于之前章節“Spring Boot 構建框架”中的pom.xml文件):

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

可以像其他Spring beans那樣注入一個自動配置的ElasticsearchTemplate或Elasticsearch客戶端實例。默認情況下,該實例將嘗試連接到一個本地內存服務器(在Elasticsearch項目中的一個NodeClient),但可以通過設置spring.data.elasticsearch.clusterNodes為一個以逗號分割的host:port列表來將其切換到一個遠程服務器(比如,TransportClient)。

@Component
public class MyBean {
 private ElasticsearchTemplate template;
 
 @Autowired
 public MyBean(ElasticsearchTemplate template) {
 this.template = template;
 }
 // ...
}

如果添加一個自己的ElasticsearchTemplate類型的@Bean,它將替換默認的。

應用集成ElasticSearch案例

新建elasticsearch.properties配置文件,添加如下配置內容:

elasticsearch.host=localhost
elasticsearch.port=9300

ElasticSearch配置,讀取elasticsearch.properties配置文件信息,具體代碼如下:

@Configuration@PropertySource(value = "classpath:elasticsearch.properties")
@EnableElasticsearchRepositories(basePackages = "co.paan.repository")
public class ElasticsearchConfiguration {
 @Resource
private Environment environment;
@Bean
public Client client() {
TransportClient client = new TransportClient();
TransportAddress address = new InetSocketTransportAddress(environment.getProperty("elasticsearch.host"), Integer.parseInt(environment.getProperty("elasticsearch.port")));
client.addTransportAddress(address); 
return client;
}
 @Beanpublic ElasticsearchOperations elasticsearchTemplate() {
 return new ElasticsearchTemplate(client());
 }
}

兩個實體類,具體代碼如下:

@Document(indexName = "post", type = "post", shards = 1, replicas = 0)
public class Post {
@Id
private String id;
 private String title;
@Field(type= FieldType.Nested)
private List<Tag> tags; 
 public String getId() {
return id;
}
 public void setId(String id) {
 this.id = id;
}
 public String getTitle() {
 return title;
}
 public void setTitle(String title) {
 this.title = title;
}
 public List<Tag> getTags() {
 return tags;
}
 public void setTags(List<Tag> tags) {
 this.tags = tags;
}
}
public class Tag {
private String id; 
private String name; 
public String getId() {
 return id;
 }
 public void setId(String id) {
 this.id = id;
 }
 public String getName() {
 return name;
 }
 public void setName(String name) {
 this.name = name;
 }
}

數據源繼承ElasticsearchRepository類,封裝接口代碼如下:

public interface PostRepository extends ElasticsearchRepository<Post, String>{
 Page<Post> findByTagsName(String name, Pageable pageable);
}

數據服務接口及實現類,代碼如下:

public interface PostService {
 Post save(Post post);
 Post findOne(String id);
 Iterable<Post> findAll();
 Page<Post> findByTagsName(String tagName, PageRequest pageRequest);
}
@Servicepublic class PostServiceImpl implements PostService{
 @Autowired
private PostRepository postRepository;
@Override
public Post save(Post post) {
 postRepository.save(post); 
 return post;
 }
 @Overridepublic Post findOne(String id) {
 return postRepository.findOne(id);
 }
 @Overridepublic Iterable<Post> findAll() {
 return postRepository.findAll();
 }
 @Overridepublic Page<Post> findByTagsName(String tagName, PageRequest pageRequest) {
 return postRepository.findByTagsName(tagName, pageRequest);
 }
}

測試代碼如下:

@Test
public void testFindByTagsName() throws Exception {
 Tag tag = new Tag();
 tag.setId("1");
 tag.setName("tech");
 Tag tag2 = new Tag();
 tag2.setId("2");
 tag2.setName("elasticsearch");
 Post post = new Post();
 post.setId("1");
 post.setTitle("Bigining with spring boot application and elasticsearch");
 post.setTags(Arrays.asList(tag, tag2));
 postService.save(post);
 Post post2 = new Post();
 post2.setId("1");
 post2.setTitle("Bigining with spring boot application");
 post2.setTags(Arrays.asList(tag));
 postService.save(post);
 Page<Post> posts = postService.findByTagsName("tech", new PageRequest(0,10));
 Page<Post> posts2 = postService.findByTagsName("tech", new PageRequest(0,10));
 Page<Post> posts3 = postService.findByTagsName("maz", new PageRequest(0,10));
 assertThat(posts.getTotalElements(), is(1L));
 assertThat(posts2.getTotalElements(), is(1L));
 assertThat(posts3.getTotalElements(), is(0L));
}

感謝各位的閱讀!關于“Spring Boot整合Elasticsearch如何實現全文搜索引擎”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平阴县| 若尔盖县| 稷山县| 冕宁县| 安康市| 海盐县| 海林市| 兰溪市| 靖安县| 尤溪县| 岳西县| 晋州市| 邢台市| 邵阳市| 舞阳县| 苏州市| 西宁市| 恩施市| 中江县| 汪清县| 治县。| 阿拉尔市| 盐城市| 增城市| 古交市| 江都市| 德江县| 长治市| 道真| 临海市| 慈溪市| 林口县| 阿克苏市| 泽普县| 安龙县| 米林县| 改则县| 门源| 河北省| 阿瓦提县| 喀什市|