feige
2023-12-05 98049e92b44f3d2e89364b58d520d04192b8e2b1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
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.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.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<EsModel> 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<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;
    }
}