New file |
| | |
| | | package com.ruoyi.service.impl; |
| | | |
| | | import com.ruoyi.common.core.domain.entity.EsModel; |
| | | import com.ruoyi.mapper.EsRepository; |
| | | import com.ruoyi.service.EsService; |
| | | |
| | | import org.elasticsearch.index.query.BoolQueryBuilder; |
| | | import org.elasticsearch.index.query.MultiMatchQueryBuilder; |
| | | import org.elasticsearch.index.query.QueryBuilders; |
| | | import org.springframework.data.domain.PageRequest; |
| | | import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate; |
| | | import org.springframework.data.elasticsearch.core.SearchHit; |
| | | import org.springframework.data.elasticsearch.core.SearchHits; |
| | | import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates; |
| | | import org.springframework.data.elasticsearch.core.query.NativeSearchQuery; |
| | | import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder; |
| | | import org.springframework.data.elasticsearch.core.query.Query; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.ArrayList; |
| | | import java.util.Iterator; |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | | |
| | | @Service |
| | | public class EsServiceImpl implements EsService { |
| | | @Resource |
| | | private EsRepository esRepository; |
| | | @Resource |
| | | private ElasticsearchRestTemplate elasticsearchRestTemplate; |
| | | @Override |
| | | public int insertTable(EsModel esModel) { |
| | | try { |
| | | esRepository.save(esModel); |
| | | // esRepository.searchSimilar() |
| | | } catch (Exception e) { |
| | | System.out.println(e); |
| | | // throw new Exception("ES数据同步失败,请联系管理员处理!"); |
| | | } |
| | | return 0; |
| | | } |
| | | |
| | | // 全文检索 |
| | | @Override |
| | | public List<EsModel> findByCondition(String con) { |
| | | List<EsModel> esm = new ArrayList<>(); |
| | | // MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("title", title); |
| | | //多字段进行匹配 |
| | | // MultiMatchQueryBuilder multiMatchQueryBuilder = QueryBuilders.multiMatchQuery(con, "ctName", "ctContent","remark", |
| | | // "by1","by2","by3","by4"); |
| | | BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); |
| | | boolQueryBuilder.should(QueryBuilders.matchQuery("ctName",con)); |
| | | boolQueryBuilder.should(QueryBuilders.matchQuery("ctContent",con)); |
| | | boolQueryBuilder.should(QueryBuilders.matchQuery("remark",con)); |
| | | boolQueryBuilder.should(QueryBuilders.matchQuery("by1",con)); |
| | | boolQueryBuilder.should(QueryBuilders.matchQuery("by2",con)); |
| | | boolQueryBuilder.should(QueryBuilders.matchQuery("by3",con)); |
| | | boolQueryBuilder.should(QueryBuilders.matchQuery("by4",con)); |
| | | boolQueryBuilder.should(QueryBuilders.matchQuery("by6",con)); |
| | | boolQueryBuilder.should(QueryBuilders.matchQuery("by7",con)); |
| | | |
| | | NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder() |
| | | .withQuery(boolQueryBuilder); |
| | | NativeSearchQuery nativeSearchQuery = nativeSearchQueryBuilder.build(); |
| | | |
| | | // 执行查询 |
| | | SearchHits<EsModel> searchHits = elasticsearchRestTemplate.search(nativeSearchQuery,EsModel.class); |
| | | searchHits.getSearchHits().forEach(personSearchHit -> { |
| | | EsModel content = personSearchHit.getContent(); |
| | | esm.add(content); |
| | | // System.out.println(content); |
| | | }); |
| | | // articleList.forEach(a-> System.out.println(a)) |
| | | |
| | | return esm; |
| | | |
| | | } |
| | | |
| | | //根据mysql中的id查找信息 |
| | | @Override |
| | | public EsModel findByCtId(Integer ctId, String ctTableName) { |
| | | // NativeSearchQuery searchQuery = new NativeSearchQueryBuilder() |
| | | // .withQuery(QueryBuilders.matchQuery("ctId", ctId)) // 自定义查询条件 |
| | | // .withQuery(QueryBuilders.matchQuery("ctTableName", ctTableName)) // 自定义查询条件 |
| | | // .build(); |
| | | BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); |
| | | boolQueryBuilder.must(QueryBuilders.matchQuery("ctId", ctId)); |
| | | boolQueryBuilder.must(QueryBuilders.matchQuery("ctTableName", ctTableName)); |
| | | |
| | | NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder() |
| | | .withQuery(boolQueryBuilder); |
| | | NativeSearchQuery nativeSearchQuery = nativeSearchQueryBuilder.build(); |
| | | |
| | | return Objects.requireNonNull(elasticsearchRestTemplate.searchOne(nativeSearchQuery, EsModel.class)).getContent(); |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void deleteById(String id) { |
| | | esRepository.deleteById(id); |
| | | } |
| | | |
| | | @Override |
| | | public void deleteAllData() { |
| | | esRepository.deleteAll(); |
| | | } |
| | | |
| | | @Override |
| | | public List<EsModel> getAll() { |
| | | |
| | | ArrayList<EsModel> esModels = new ArrayList<>(); |
| | | |
| | | // 构建查询请求 |
| | | SearchHits<EsModel> searchHits = elasticsearchRestTemplate.search(Query.findAll(), EsModel.class,IndexCoordinates.of("allsearchdata")); |
| | | |
| | | Iterator<SearchHit<EsModel>> iterator = searchHits.stream().iterator(); |
| | | while (iterator.hasNext()){ |
| | | esModels.add(iterator.next().getContent()); |
| | | } |
| | | // 返回查询结果 |
| | | return esModels; |
| | | } |
| | | } |