feige
2023-09-16 d29cce61fb3a38f9f57a64a2a20d276b0d1254bc
es的增加索引和查询已经写好了,可以直接调用了
7个文件已修改
1个文件已添加
219 ■■■■ 已修改文件
ruoyi-admin/src/main/resources/application-druid.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/test/java/com/ruoyi/esTest.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/config/ElasticSearchConfig.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/EsModel.java 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhang-content/src/main/java/com/ruoyi/service/esService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhang-content/src/main/java/com/ruoyi/service/impl/ZfEventServiceImpl.java 41 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zhang-content/src/main/java/com/ruoyi/service/impl/esServiceImpl.java 61 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application-druid.yml
@@ -6,7 +6,7 @@
        druid:
            # 主库数据源
            master:
     #           url: jdbc:mysql://47.93.189.255:3306/ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                #url: jdbc:mysql://47.93.189.255:3306/ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                url: jdbc:mysql://localhost:3306/ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                username: root
                password: ZhangApp123!
ruoyi-admin/src/main/resources/application.yml
@@ -51,8 +51,8 @@
spring:
  #es配置
  elasticsearch:
    rest:
      uris: http://localhost:8087
    host: 47.93.189.255
    port: 8087
  # 资源信息
  messages:
    # 国际化资源文件路径
ruoyi-admin/src/test/java/com/ruoyi/esTest.java
@@ -4,6 +4,11 @@
import com.ruoyi.common.config.ElasticSearchConfig;
import com.ruoyi.common.core.domain.entity.EsModel;
import com.ruoyi.domain.ZfEvent;
import com.ruoyi.mapper.EsRepository;
import com.ruoyi.service.ZfEventService;
import com.ruoyi.service.esService;
import org.elasticsearch.client.IndicesClient;
@@ -11,25 +16,53 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.UUID;
@SpringBootTest
public class esTest {
    @Autowired
    private esService ess;
    @Autowired
    private EsRepository resp;
    @Autowired
    private ZfEventService zfEs;
    @Test
    public void esUser()
    {
        System.out.println("__________________________");
        System.out.println(ess.findByCondition("我真的很开心"));
//     request.settings(Settings.builder().put("number_of_shards", "1").put("number_of_replicas", "0"));
//     request.settings(Settings.builder().put("number_of_shards", "1").put("number_of_replicas", "0"));
    }
    @Test
    public void esUs()
    {
        // 操作索引的对象
//        // 操作索引的对象
        System.out.println(ess);
        ZfEvent zfe = new ZfEvent();
        zfe.setId(1489);
        zfe.setRemark("大家好90");
        zfe.setAddress("你好2");
        zfe.setTitle("很好很好");
        zfe.setPeople("你好");
        zfEs.addData(zfe);
     //   ess.insertTable("lis");
//
//        EsModel esModel = new EsModel();
//        Integer inte = 5688;
//        String uuid = UUID.randomUUID().toString().replace("-","");
//        esModel.setId(Long.valueOf(inte));
//        esModel.setCtId(Long.valueOf(inte));
//        esModel.setCtName("3434");
//        esModel.setCtContent("大家好,才是真的好!");
//
//        //这里存储查询详情的路径
//        esModel.setBy5("/family/zfEvent");
//        resp.save(esModel);
       // ess.insertTable(esModel);
ruoyi-common/src/main/java/com/ruoyi/common/config/ElasticSearchConfig.java
New file
@@ -0,0 +1,43 @@
package com.ruoyi.common.config;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@ConfigurationProperties(prefix = "elasticsearch")
public class ElasticSearchConfig {
    private String host;
    private int port;
    public String getHost() {
        return host;
    }
    public void setHost(String host) {
        this.host = host;
    }
    public int getPort() {
        return port;
    }
    public void setPort(int port) {
        this.port = port;
    }
    @Bean
    public RestHighLevelClient client(){
        return new RestHighLevelClient(RestClient.builder(
                new HttpHost(
                        "47.93.189.255",
                        8087,
                        "http"
                )
        ));
    }
}
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/EsModel.java
@@ -2,7 +2,6 @@
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
@@ -16,55 +15,55 @@
 * @author feige
 * @date 2023-09-14
 */
@Document(indexName = "allsearch")
@Document(indexName = "allsearchdata")
@Data
public class EsModel {
    /*** 索引id*/
    @Id
    @Field(type = FieldType.Text)
    private String id;
    /**** es中对应的数据库业务单据id*/
    @Field(analyzer = "ik_max_word")
    @Field(index = true,type = FieldType.Long)
    private Long ctId;
    /**** es中业务数据 对应的业务数据库表名称*/
    @Field(analyzer = "ik_max_word")
    @Field(type = FieldType.Text,analyzer = "ik_max_word")
    private String ctTableName;
    /**** es中业务数据 对应的 业务简称*/
    @Field(analyzer = "ik_max_word")
    @Field(index = true,type = FieldType.Text,analyzer = "ik_max_word")
    private String ctName;
    /**** es中业务数据 对应的 业务内容详细信息*/
    @Field(analyzer = "ik_max_word")
    @Field(index = true,type = FieldType.Text
            ,analyzer = "ik_max_word")
    private String ctContent;
    /** 备注 */
    @Field(analyzer = "ik_max_word")
    @Field(index = true,type = FieldType.Text,analyzer = "ik_max_word")
    private String remark;
    /** 备用1 */
    @Field(analyzer = "ik_max_word")
    @Field(index = true,type = FieldType.Text,analyzer = "ik_max_word")
    private String by1;
    /** 备用2 */
    @Field(analyzer = "ik_max_word")
    @Field(index = true,type = FieldType.Text,analyzer = "ik_max_word")
    private String by2;
    /** 备用3 */
    @Field(analyzer = "ik_max_word")
    @Field(index = true,type = FieldType.Text,analyzer = "ik_max_word")
    private String by3;
    /** 备用4 */
    @Field(analyzer = "ik_max_word")
    @Field(index = true,type = FieldType.Text,analyzer = "ik_max_word")
    private String by4;
    /** 备用5 */
    @Field(analyzer = "ik_max_word")
    @Field(type = FieldType.Text,analyzer = "ik_max_word")
    private String by5;
}
zhang-content/src/main/java/com/ruoyi/service/esService.java
@@ -2,6 +2,12 @@
import com.ruoyi.common.core.domain.entity.EsModel;
import java.util.List;
public interface esService {
    //  插入索引
    public int insertTable(EsModel esModel);
    //
    public List<EsModel> findByCondition(String con);
}
zhang-content/src/main/java/com/ruoyi/service/impl/ZfEventServiceImpl.java
@@ -313,26 +313,26 @@
    @Override
    public AjaxResult addData(ZfEvent zfEvent) {
        ZInfoUser myself = zInfoUserService.getMyself();
        Long familyId = myself.getFamilyId();
        if(familyId == null){
            throw new RuntimeException("您还未加入任何家庭");
        }
        List<ZAuthority> authority = zAuthorityService.getAuthority();
        List<Long> familyIdList = authority.stream().filter(auth -> auth.getAuthority().toString().equals(EVENT_LIST_ADD)).map(ZAuthority::getFid).collect(Collectors.toList());
        familyIdList.add(familyId);
        if (zfEvent.getFamilyId()!=null && !familyIdList.contains(zfEvent.getFamilyId())) {
            throw new RuntimeException("你没有权限操作此家庭的数据");
        }
        if(zfEvent.getFamilyId() == null){
            //默认添加自己家庭的数据
            zfEvent.setFamilyId(familyId);
        }
//        ZInfoUser myself = zInfoUserService.getMyself();
//        Long familyId = myself.getFamilyId();
//
//        if(familyId == null){
//            throw new RuntimeException("您还未加入任何家庭");
//        }
//
//        List<ZAuthority> authority = zAuthorityService.getAuthority();
//        List<Long> familyIdList = authority.stream().filter(auth -> auth.getAuthority().toString().equals(EVENT_LIST_ADD)).map(ZAuthority::getFid).collect(Collectors.toList());
//        familyIdList.add(familyId);
//
//        if (zfEvent.getFamilyId()!=null && !familyIdList.contains(zfEvent.getFamilyId())) {
//            throw new RuntimeException("你没有权限操作此家庭的数据");
//        }
//
//
//        if(zfEvent.getFamilyId() == null){
//            //默认添加自己家庭的数据
//            zfEvent.setFamilyId(familyId);
//        }
        //判断是否有重复数据
        LambdaQueryWrapper<ZfEvent> lqw = uniqueCondition(zfEvent);
@@ -358,6 +358,7 @@
            //   esModel.setCtName("大家");
            //  esModel.setCtContent("大家好,才是真的好");//处事由
            esSer.insertTable(esModel);
            return AjaxResult.success();
        } else {
            return AjaxResult.error();
zhang-content/src/main/java/com/ruoyi/service/impl/esServiceImpl.java
@@ -4,35 +4,68 @@
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.SearchHits;
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
@Service
public class esServiceImpl implements esService {
    @Resource
    private EsRepository esRepository;
    @Resource
    private ElasticsearchRestTemplate elasticsearchRestTemplate;
    @Override
    public int insertTable(EsModel esModel) {
       // EsModel esModel = new EsModel();
      //  Integer integer = new Integer(123);
      //  esModel.setId(Long.valueOf(integer));
      //  esModel.setCtId(Long.valueOf(integer));
       // esModel.setCtTableName("tb_ajk");
         //   esModel.setCtName("大家");
          //  esModel.setCtContent("大家好,才是真的好");//处事由
//            esModel.setBy1(tbAjk.getLaay());//案由
//            esModel.setBy2(tbAjk.getAjlb());//类别
//            esModel.setBy3(tbAjk.getCjnr());//内容
//            esModel.setBy4(tbAjk.getContent());//出内容
//            esModel.setBy5(tbAjk.getCbpcs());//承办
//            esModel.setRemark(tbAjk.getJyaq());//简要情
        try {
            esRepository.save(esModel);
           // esRepository.searchSimilar()
        } catch (Exception e) {
            System.out.println("dddddddddddd");
            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));
        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;
    }
}