package com.kwan.shuyu.service.impl; import com.alibaba.fastjson.JSON; import com.kwan.shuyu.domain.Content; import com.kwan.shuyu.service.ContentService; import com.kwan.shuyu.util.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.unit.TimeValue; import org.elasticsearch.common.xcontent.XContentType; 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.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 ContentServiceImpl implements ContentService { @Autowired private HtmlParseUtil htmlParseUtil; @Autowired private RestHighLevelClient restHighLevelClient; /** * 解析数据放入es索引中 * * @param keywords * @return * @throws Exception */ @Override public Boolean parseContent(String keywords) throws Exception { List contents = htmlParseUtil.parseJD(keywords); //把查询出来的数据放入es里面 BulkRequest bulkRequest = new BulkRequest(); bulkRequest.timeout(TimeValue.timeValueMinutes(120)); for (int i = 0; i < contents.size(); i++) { System.out.println(contents.get(i)); bulkRequest.add( new IndexRequest("jd_goods" + keywords, keywords + "") .source(JSON.toJSONString(contents.get(i)), XContentType.JSON)); } BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT); return !bulk.hasFailures(); } /** * 获取这些数据实现搜索功能 * * @param keyword * @param pageNo * @param pageSize * @return * @throws IOException */ @Override public List> searchPage(String keyword, int pageNo, int pageSize) throws IOException { if (pageNo <= 1) { pageNo = 1; } //条件搜索 SearchRequest searchRequest = new SearchRequest("jd_goods"); //资源构造器(封装查询条件) SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); //分页 sourceBuilder.from(pageNo); sourceBuilder.size(pageSize); //精准匹配 TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("title", keyword); sourceBuilder.query(termQueryBuilder); sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS)); //执行搜索 searchRequest.source(sourceBuilder); SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); //解析结果 List> list = new ArrayList<>(); for (SearchHit documentFields : searchResponse.getHits().getHits()) { list.add(documentFields.getSourceAsMap()); } return list; } }