- 1. 版本兼容
- 2. 导入依赖
- 3. 配置
- 4. 主页面
- 5. 控制层
- 6. 逻辑处理层
- 7. pojo
- 8. 工具类
- 9. 常量类
- 10. 前端页面
- 项目开源地址
3. 配置org.springframework.boot spring-boot-starter-parent2.6.1 org.jsoup jsoup1.14.3 com.alibaba fastjson1.2.78 org.springframework.boot spring-boot-starter-data-elasticsearchorg.springframework.boot spring-boot-starter-weborg.springframework.boot spring-boot-starter-thymeleaforg.springframework.boot spring-boot-devtoolsruntime true org.projectlombok lomboktrue org.springframework.boot spring-boot-starter-testtest
server.port=9090 spring.thymeleaf.cache=false
ElasticsearchClientConfig
package com.gblfy.es7jdvue.config; import org.apache.http.HttpHost; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class ElasticsearchClientConfig { @Bean public RestHighLevelClient restHighLevelClient() { RestHighLevelClient client = new RestHighLevelClient( RestClient.builder( new HttpHost("localhost", 9200, "http"))); return client; } }4. 主页面
package com.gblfy.es7jdvue.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller public class IndexController { @GetMapping({"/index"}) public String index() { return "index"; } }5. 控制层
package com.gblfy.es7jdvue.controller; import com.gblfy.es7jdvue.service.ContentService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import java.io.IOException; import java.util.List; import java.util.Map; @RestController public class ContentController { @Autowired private ContentService contentService; @GetMapping("/parse/{keyword}") public Boolean parse(@PathVariable("keyword") String keyword) throws IOException { return contentService.parseContent(keyword); } @GetMapping("/search/{keyword}/{pageNo}/{pageSize}") public List6. 逻辑处理层
package com.gblfy.es7jdvue.service; import com.alibaba.fastjson.JSON; import com.gblfy.es7jdvue.consts.ESConst; import com.gblfy.es7jdvue.pojo.Content; import com.gblfy.es7jdvue.utils.HtmlParseUtil; import org.elasticsearch.action.bulk.BulkRequest; import org.elasticsearch.action.bulk.BulkResponse; import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.common.text.Text; import org.elasticsearch.common.xcontent.XContentType; import org.elasticsearch.core.Timevalue; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.TermQueryBuilder; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder; import org.elasticsearch.search.fetch.subphase.highlight.HighlightField; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; @Service public class ContentService { @Autowired private RestHighLevelClient restHighLevelClient; //1.解析数据放入es索引中 public Boolean parseContent(String keyword) throws IOException { List7. pojocontentList = new HtmlParseUtil().parseJD(keyword); // 把查询道德数据放入es BulkRequest bulkRequest = new BulkRequest(); bulkRequest.timeout(ESConst.BULK_REQUEST_TIMEOUT); for (int i = 0; i < contentList.size(); i++) { bulkRequest.add(new IndexRequest(ESConst.JD_SEARCH_INDEX) .source(JSON.toJSONString(contentList.get(i)), XContentType.JSON)); } BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT); return !bulk.hasFailures(); } // 2. 获取es中的数据,实现基本搜索功能 public List
package com.gblfy.es7jdvue.pojo; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor @Builder public class Content { private String title; private String img; private String price; }8. 工具类
package com.gblfy.es7jdvue.pojo; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor @Builder public class Content { private String title; private String img; private String price; }9. 常量类
package com.gblfy.es7jdvue.consts; public class ESConst { //拉取数据url前缀 public static final String PULL_DATA_baseURL = "https://search.jd.com/Search?keyword="; //拉取商品数据标签 public static final String PULL_GOOD_DATA_TAG ="J_goodsList"; //商品数据标签中元素标签 public static final String PULL_GOOD_DATA_CHILD_TAG ="li"; //京东搜索数据索引 public static final String JD_SEARCH_INDEX = "jd_goods"; //高亮标题 public static final String HIGHLIGHT_TITLE = "title"; //高亮标签前缀 public static final String HIGHLIGHT_PRE_TAGS = ""; //高亮标签后缀 public static final String HIGHLIGHT_POST_TAGS = ""; //搜索挑条件字段 public static final String SEARCH_CONDITION_FIELD = "title"; public static final String BULK_REQUEST_TIMEOUT = "2m"; }10. 前端页面
gblfyJava-ES仿京东实战
评论列表(0条)