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<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");
|
|
|
//要查自己家庭的
|
ZInfoUser myself = zInfoUserService.getMyself();
|
Long familyId = myself.getFamilyId();
|
//也要查别人授权的
|
List<ZAuthority> authority = zAuthorityService.getAuthority();
|
List<Long> 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.filter(QueryBuilders.termsQuery("fid", idList));
|
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;
|
}
|
}
|