package com.ruoyi.service.impl; import com.ruoyi.common.core.domain.entity.EsModel; import com.ruoyi.domain.ZAuthority; import com.ruoyi.domain.ZInfoUser; import com.ruoyi.mapper.EsRepository; import com.ruoyi.service.EsService; import com.ruoyi.service.ZAuthorityService; import com.ruoyi.service.ZInfoUserService; 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; import java.util.stream.Collectors; import static com.ruoyi.constant.MenuAuthority.EQUIPMENT_LIST; @Service public class EsServiceImpl implements EsService { @Resource private EsRepository esRepository; @Resource private ElasticsearchRestTemplate elasticsearchRestTemplate; @Resource private ZInfoUserService zInfoUserService; @Resource private ZAuthorityService zAuthorityService; @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 findByCondition(String con) { List esm = new ArrayList<>(); // MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("title", title); //多字段进行匹配 // MultiMatchQueryBuilder multiMatchQueryBuilder = QueryBuilders.multiMatchQuery(con, "ctName", "ctContent","remark", // "by1","by2","by3","by4"); //要查自己家庭的 ZInfoUser myself = zInfoUserService.getMyself(); Long familyId = myself.getFamilyId(); //也要查别人授权的 List authority = zAuthorityService.getAuthority(); List idList = authority.stream().filter(auth -> auth.getAuthority().toString().equals(EQUIPMENT_LIST)).map(ZAuthority::getFid).collect(Collectors.toList()); //加上自己家庭的id idList.add(familyId); 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 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.stream().filter(esModel -> { return idList.contains(esModel.getFid()); }).collect(Collectors.toList()); } //根据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(); SearchHit esModelSearchHit = elasticsearchRestTemplate.searchOne(nativeSearchQuery, EsModel.class); if(esModelSearchHit != null){ return esModelSearchHit.getContent(); } return null; } @Override public void deleteById(String id) { esRepository.deleteById(id); } @Override public void deleteAllData() { esRepository.deleteAll(); } @Override public List getAll() { ArrayList esModels = new ArrayList<>(); // 构建查询请求 SearchHits searchHits = elasticsearchRestTemplate.search(Query.findAll(), EsModel.class,IndexCoordinates.of("allsearchdata")); Iterator> iterator = searchHits.stream().iterator(); while (iterator.hasNext()){ esModels.add(iterator.next().getContent()); } // 返回查询结果 return esModels; } }