栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring Boot elasticsearch7.6.2基础操作:创建索引、新增数据、查询数据含源码

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Boot elasticsearch7.6.2基础操作:创建索引、新增数据、查询数据含源码

Spring Boot elasticsearch7.6.2基础操作:创建索引、新增数据、查询数据含源码

这是我参考网上大佬写的例子,代码不想留在电脑里面就把它记录在博客上,或许对大家有一丢丢的帮助。

项目源码我上传到了CSDN,所需积分/C币:0,https://download.csdn.net/download/qq_40018541/85240897

pom.xml文件配置

		
            org.elasticsearch
            elasticsearch
            7.6.2
        
        
            org.elasticsearch.client
            transport
            7.6.2
        
        
            org.elasticsearch.plugin
            transport-netty4-client
            7.6.2
        

        
            org.springframework.boot
            spring-boot-starter-data-elasticsearch
            
                
                    org.elasticsearch.client
                    elasticsearch-rest-high-level-client
                
            
        
        
            org.elasticsearch.client
            elasticsearch-rest-high-level-client
            ${elasticsearch.version}
            
                
                    org.elasticsearch
                    elasticsearch
                
            
        

实体类People.java

@Data
@Builder
@Document(indexName = "people_index",shards = 1,replicas = 1)
public class People {
    @Id
    private String id;
    
    @Field(type = FieldType.Text,analyzer = "ik_max_word")
    private String name;
    @Field(type = FieldType.Text,analyzer = "ik_max_word")
    private String address;
    @Field(type = FieldType.Integer,index = false)
    private int age;
}

接口继承调用 EsOptlogRepository.java,EsOptlogRepository已经包含常用的查询等crud操作,直接可使用,也可以根据自己的需求编写ElasticsearchRepository自定义方法。

import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

public interface EsOptlogRepository extends ElasticsearchRepository {
	//TODO ElasticsearchRepository自定义方法
}

EsdemoApplicationTests.java 测试demo

@SpringBootTest
class EsdemoApplicationTests {
    @Resource
    private ElasticsearchRestTemplate elasticsearchRestTemplate;
    @Resource
    private EsOptlogRepository esOptlogRepository;
    @Test
    void createIndex(){
        boolean exists = elasticsearchRestTemplate.indexOps(People.class).exists();
        System.out.println(exists);
        if(exists)elasticsearchRestTemplate.indexOps(People.class).delete();
        elasticsearchRestTemplate.indexOps(People.class).create();
        elasticsearchRestTemplate.indexOps(People.class).putMapping();
    }
    @Test
    void contextLoads() {
        People people = new People();
        people.setId("123");
        people.setName("mayun");
        people.setAge(20);
        people.setAddress("贵州贵阳观山湖区***");
        //保存到es
        esOptlogRepository.save(people);
        esOptlogRepository.findAll();
//        NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
//        NativeSearchQuery nativeSearchQuery = nativeSearchQueryBuilder
//                // 整体匹配
//                .withQuery(QueryBuilders.termQuery("sex", people.getAge()))
//                // 分词匹配
//                .withQuery(QueryBuilders.matchQuery("personName", people.getName()))
//                .withQuery(QueryBuilders.matchQuery("address", people.getAddress()))
//                .withQuery(QueryBuilders.matchQuery("remarks", people.getAddress()))
//                //短语搜索
//                .withQuery(QueryBuilders.matchPhraseQuery("address", people.getAddress()))
//                .withQuery(QueryBuilders.rangeQuery("age").format("yyyy-MM-dd").gte(12).lte(20))
//                .build();
//        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
//        List listQuery = new ArrayList<>();
//        listQuery.add(QueryBuilders.rangeQuery("age").format("yyyy-MM-dd").gte(12).lte(20));
//        listQuery.add(QueryBuilders.matchQuery("personName", people.getName()));
//        boolQueryBuilder.should().addAll(listQuery);//should包条件(或)
//        boolQueryBuilder.must().addAll(listQuery);//must必须成立(与)
//        NativeSearchQuery nativeSearchQuery2 = new NativeSearchQuery(boolQueryBuilder);
//
//        NativeSearchQuery nativeSearchQuery1 = new NativeSearchQuery(QueryBuilders.matchAllQuery());
//        nativeSearchQuery1.setPageable(PageRequest.of(0,2));//分页
//        nativeSearchQuery1.addSort(Sort.by(Sort.Direction.DESC,"age"));//排序
    }

    @Test
    void demoTest() throws UnknownHostException {
        Map map = new HashMap<>();
        TransportClient client1 = new PreBuiltTransportClient(Settings.EMPTY);
        //client1.addTransportAddress(new InetSocketTransportAddress(new InetSocketAddress("xxxxxxxx", 9300)));
        client1.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.254.149"), 9200));

        SearchRequestBuilder searchRequestBuilder = client1.prepareSearch("people_index")
                .addAggregation(AggregationBuilders.terms("name").field("name").size(1000)
                        .subAggregation(AggregationBuilders.sum("age").field("age")));

        SearchResponse response = searchRequestBuilder.execute().actionGet();
        Terms terms = response.getAggregations().get("name");

        List buckets = terms.getBuckets();
        for (Terms.Bucket bucket : buckets) {
            InternalSum sum = bucket.getAggregations().get("age");
            map.put(bucket.getKeyAsString(), (long) sum.getValue());
        }
        System.out.println(map);
    }
}

大批量操作数据时,可以把这段代码加入到拦截器中,这样可以拦截需要自定义返回值大小的es请求
yml文件配置

es:
  data:
    size: 500
import org.elasticsearch.client.HeapBufferedAsyncResponseConsumer;
import org.elasticsearch.client.HttpAsyncResponseConsumerFactory;
import org.elasticsearch.client.RequestOptions;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;


@Configuration
public class EsConfig {
    @Value("${es.data.size:}")
    private Integer dataSize;
    
    @Bean
    public void setRequestOptions() throws NoSuchFieldException, IllegalAccessException {
        //设置es查询buffer大小
        RequestOptions requestOptions = RequestOptions.DEFAULT;
        Class reqClass = requestOptions.getClass();
        Field reqField = reqClass.getDeclaredField("httpAsyncResponseConsumerFactory");
        reqField.setAccessible(true);
        //去除final
        Field modifiersField = Field.class.getDeclaredField("modifiers");
        modifiersField.setAccessible(true);
        modifiersField.setInt(reqField, reqField.getModifiers() & ~Modifier.FINAL);
        //设置默认的工厂
        reqField.set(requestOptions, (HttpAsyncResponseConsumerFactory) () -> {
            Integer size = new Integer( 5 * 100);
            if(dataSize!=null){
                size = dataSize;
            }
            //500MB
            return new HeapBufferedAsyncResponseConsumer( size * 1024 * 1024);
        });
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/845536.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号