当前位置: 首页 > wzjs >正文

经营网站备案信息wordpress主题少儿教育类

经营网站备案信息,wordpress主题少儿教育类,网络营销的概念及特征,成都商城网站制作Elasticsearch 是一个基于 Lucene 的分布式搜索服务器,具有高效的全文检索能力。在现代应用中,尤其是需要强大搜索功能的系统中,Elasticsearch 被广泛使用。 Spring Boot 提供了对 Elasticsearch 的集成支持,使得开发者可以轻松地…

Elasticsearch 是一个基于 Lucene 的分布式搜索服务器,具有高效的全文检索能力。在现代应用中,尤其是需要强大搜索功能的系统中,Elasticsearch 被广泛使用。

Spring Boot 提供了对 Elasticsearch 的集成支持,使得开发者可以轻松地将 Elasticsearch 集成到 Spring Boot 应用中,实现高效的搜索、分析等功能。本文将详细介绍如何在 Spring Boot 中集成 Elasticsearch,并展示一些基本的使用示例以及通过 ElasticsearchRestTemplate 实现的高级功能。

一、准备工作

1. 安装 Elasticsearch

你可以通过以下方式安装 Elasticsearch:

  • 使用 Docker 安装
docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:8.11.3
  • 直接下载安装包:Elasticsearch 下载页面

确保 Elasticsearch 成功启动后,可以通过浏览器访问 http://localhost:9200 查看其状态信息。


二、创建 Spring Boot 项目

使用 Spring Initializr 创建一个 Spring Boot 项目,选择以下依赖:

  • Spring Web
  • Spring Data Elasticsearch

或者手动在 pom.xml 中添加如下依赖(适用于 Maven 项目):

<dependencies><!-- Spring Boot Starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!-- Spring Boot Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring Data Elasticsearch --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency><!-- Lombok(可选) --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>provided</scope></dependency>
</dependencies>

三、配置 Elasticsearch

application.ymlapplication.properties 中配置 Elasticsearch 连接信息:

spring:elasticsearch:rest:uris: http://localhost:9200

如果你使用的是较老版本的 Spring Boot,可能需要手动配置 RestHighLevelClient,但在新版本中已默认使用 ElasticsearchRestTemplateRestClient


四、定义实体类

我们先定义一个简单的实体类,并使用注解来映射 Elasticsearch 索引结构。

import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;@Document(indexName = "blog-post", shards = 1)
public class BlogPost {@Idprivate String id;@Field(type = FieldType.Text, analyzer = "ik_max_word")private String title;@Field(type = FieldType.Text, analyzer = "ik_max_word")private String content;// 构造方法、getter/setter 省略
}

注意:如果使用中文分词,建议使用 ik-analyzer 插件,在 Elasticsearch 中安装后指定 analyzer


五、定义 Repository 接口

Spring Data 提供了 ElasticsearchRepository 接口,我们可以继承它来操作文档。

import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;public interface BlogPostRepository extends ElasticsearchRepository<BlogPost, String> {
}

六、编写 Service 层

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;
import java.util.Optional;@Service
public class BlogPostService {@Autowiredprivate BlogPostRepository blogPostRepository;public BlogPost save(BlogPost blogPost) {return blogPostRepository.save(blogPost);}public Optional<BlogPost> findById(String id) {return blogPostRepository.findById(id);}public Iterable<BlogPost> findAll() {return blogPostRepository.findAll();}public void deleteById(String id) {blogPostRepository.deleteById(id);}public List<BlogPost> searchByTitle(String title) {return blogPostRepository.findByTitle(title);}
}

七、编写 Controller 层

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@RequestMapping("/api/blog-posts")
public class BlogPostController {@Autowiredprivate BlogPostService blogPostService;@PostMappingpublic BlogPost create(@RequestBody BlogPost blogPost) {return blogPostService.save(blogPost);}@GetMapping("/{id}")public BlogPost get(@PathVariable String id) {return blogPostService.findById(id).orElse(null);}@GetMappingpublic Iterable<BlogPost> getAll() {return blogPostService.findAll();}@DeleteMapping("/{id}")public void delete(@PathVariable String id) {blogPostService.deleteById(id);}@GetMapping("/search")public List<BlogPost> search(@RequestParam String title) {return blogPostService.searchByTitle(title);}
}

八、补充内容:使用 ElasticsearchRestTemplate

除了使用 Repository,我们还可以通过 ElasticsearchRestTemplate 来执行更复杂的查询、聚合、高亮等操作。

1. 注入 ElasticsearchRestTemplate

@Autowired
private ElasticsearchRestTemplate elasticsearchRestTemplate;

2. 构建基本查询(Match 查询)

import org.springframework.data.elasticsearch.core.query.Criteria;
import org.springframework.data.elasticsearch.core.query.CriteriaQuery;public List<BlogPost> searchByTitleWithTemplate(String keyword) {Criteria criteria = new Criteria("title").is(keyword);CriteriaQuery query = new CriteriaQuery(criteria);SearchHits<BlogPost> hits = elasticsearchRestTemplate.search(query, BlogPost.class);return hits.stream().map(SearchHit::getContent).collect(Collectors.toList());
}

3. 使用 NativeSearchQueryBuilder 构建复杂查询

import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.MatchQueryBuilder;import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.elasticsearch.core.query.SearchQuery;public List<BlogPost> searchByContentWithMatchQuery(String keyword) {MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("content", keyword);SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQueryBuilder).build();SearchHits<BlogPost> hits = elasticsearchRestTemplate.search(searchQuery, BlogPost.class);return hits.stream().map(SearchHit::getContent).collect(Collectors.toList());
}

4. 聚合查询(Aggregation)

import org.elasticsearch.index.aggregation.AggregationBuilders;
import org.elasticsearch.index.aggregation.bucket.terms.TermsAggregationBuilder;public void aggregateKeywordsInTitle() {TermsAggregationBuilder aggregation = AggregationBuilders.terms("keywords").field("title.keyword") // 注意字段类型应为 keyword.size(10);SearchQuery searchQuery = new NativeSearchQueryBuilder().withAggregations(aggregation).build();SearchHits<BlogPost> hits = elasticsearchRestTemplate.search(searchQuery, BlogPost.class);Terms keywordsAgg = hits.getAggregations().get("keywords");for (Terms.Bucket entry : keywordsAgg.getBuckets()) {System.out.println(entry.getKey() + ":" + entry.getDocCount());}
}

5. 高亮显示匹配内容

import org.elasticsearch.index.highlight.HighlightBuilder;
import org.springframework.data.elasticsearch.core.query.HighlightQuery;public List<BlogPost> searchWithHighlight(String keyword) {HighlightBuilder highlightBuilder = new HighlightBuilder();highlightBuilder.field("content"); // 对 content 字段进行高亮highlightBuilder.preTags("<strong>").postTags("</strong>");MatchQueryBuilder matchQuery = QueryBuilders.matchQuery("content", keyword);SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery).withHighlightBuilder(highlightBuilder).build();SearchHits<BlogPost> hits = elasticsearchRestTemplate.search(searchQuery, BlogPost.class);return hits.stream().map(hit -> {Map<String, List<String>> highlightFields = hit.getHighlightFields();if (highlightFields.containsKey("content")) {String highlightedContent = String.join("...", highlightFields.get("content"));hit.getContent().setContent(highlightedContent); // 替换内容为高亮版本}return hit.getContent();}).collect(Collectors.toList());
}

6. 分页查询

public List<BlogPost> searchWithPagination(String keyword, int page, int size) {MatchQueryBuilder matchQuery = QueryBuilders.matchQuery("title", keyword);SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery).withPageable(PageRequest.of(page, size)).build();SearchHits<BlogPost> hits = elasticsearchRestTemplate.search(searchQuery, BlogPost.class);return hits.stream().map(SearchHit::getContent).collect(Collectors.toList());
}

九、测试 API

你可以使用 Postman 或 curl 测试以下接口:

  • POST /api/blog-posts:创建一篇博客
  • GET /api/blog-posts/{id}:获取某篇博客
  • GET /api/blog-posts:获取所有博客
  • DELETE /api/blog-posts/{id}:删除博客
  • GET /api/blog-posts/search?title=xxx:按标题搜索博客
  • 更多通过 ElasticsearchRestTemplate 支持的高级查询也可以通过新增接口调用。

十、总结

本文详细介绍了如何在 Spring Boot 项目中集成 Elasticsearch,并实现了基本的增删改查操作。同时,通过 ElasticsearchRestTemplate 展示了构建复杂查询、聚合、高亮、分页等高级功能的方式。

通过 Spring Data Elasticsearch 提供的抽象,我们可以非常方便地进行数据持久化和检索。而 ElasticsearchRestTemplate 则为我们提供了更灵活的底层控制能力,非常适合用于构建企业级搜索功能。


参考资料

  • Spring Data Elasticsearch 官方文档
  • Elasticsearch 官网
  • IK Analyzer GitHub

文章转载自:

http://DMj67GB1.mzzqs.cn
http://g8LdpJA8.mzzqs.cn
http://b3Xiw7uJ.mzzqs.cn
http://jjjtg4q4.mzzqs.cn
http://obTKhNfi.mzzqs.cn
http://HxHlMeVg.mzzqs.cn
http://THHOLtnW.mzzqs.cn
http://TEyUMFPJ.mzzqs.cn
http://B4VbGEeY.mzzqs.cn
http://IX1IAq5O.mzzqs.cn
http://oHc8o31O.mzzqs.cn
http://Jv5dcNXV.mzzqs.cn
http://Qxh1ZohP.mzzqs.cn
http://w4PAnBQb.mzzqs.cn
http://wiKuhTye.mzzqs.cn
http://avWBzm7P.mzzqs.cn
http://TDy8T6Qd.mzzqs.cn
http://SeGiVSpK.mzzqs.cn
http://vJgl8zLe.mzzqs.cn
http://SL9K4WcB.mzzqs.cn
http://6lL44L8d.mzzqs.cn
http://tHI9goRY.mzzqs.cn
http://lWINyRLH.mzzqs.cn
http://SypkqSCR.mzzqs.cn
http://zY0AcHvc.mzzqs.cn
http://zZBnHL8T.mzzqs.cn
http://fSe4JoVK.mzzqs.cn
http://qejjmYan.mzzqs.cn
http://3OffdMiL.mzzqs.cn
http://YhUkLi5G.mzzqs.cn
http://www.dtcms.com/wzjs/688424.html

相关文章:

  • 有没有做粤菜的网站ppt模板下载免费完整版简约
  • 公众号网站wordpress做成app
  • 用什么来网站开发好湖北工程建设信息网站
  • 如何提高网站访问速度代理网址ip
  • 网站描述作用注册公司需要几个人员
  • 深圳网站设计廊坊公司哪个搜索引擎最好
  • 自建站推广html电影网站模板下载
  • 用asp做网站优势wordpress 附件id
  • 某网站seo诊断分析和优化方案wordpress自定义搜索
  • 做深度的互联网站seo网站建设
  • 如何建设大型电子商务网站网站建设及推广外包
  • 联系方式 响应式网站汽车网站建设论坛
  • 购物网站制作怎么做培训课程设计
  • 网站建设项目的工作分解手机前端开发软件工具
  • 人才网站开发方案建设专业网站运营团队
  • 正品手表网站wordpress导航字体大小
  • 网站建设顾问英语公司 网站 苏州
  • 网站建设公司浙江山东建设厅网站是什么
  • 网站怎么做能赚钱吗电子商城网站建议书
  • 玩具网站建设服务公司如何查注册商标是别人注册过的
  • 怎么在ppt上做网站百度问一问官网
  • 丹阳做网站的yy直播间
  • 昆明网站建设方案外包毕业设计做系统网站好
  • 网站设计考虑因素打开自己的网站是别人的域
  • 上海网站制作培训百度招聘2022年最新招聘
  • 南宁做棋牌网站的公司国内最好的crm软件
  • 做关于车的网站好wordpress自定义json
  • 做本地化的返利网站怎么样网站服务器查询工具
  • wordpress子站点用户无角色网站的优势
  • 小型网站建设公司优化专业的公司