springboot操作elasticsearch部分操作

springboot-elasticsearch

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
/**
 * 9200rest端口,tcp9300端口
 */
@Configuration
public class RestClientConfig extends AbstractElasticsearchConfiguration {
    @Bean
    public RestHighLevelClient elasticsearchClient(){

        final ClientConfiguration clientConfiguration = ClientConfiguration.builder()
                .connectedTo("192.168.149.129:9200")
                .build();
        return RestClients.create(clientConfiguration).rest();
    }
}

restHighLevelClient

@SpringBootTest
public class TestRestClient {
    @Resource
    private RestHighLevelClient restHighLevelClient;   //复杂查询使用

    //ElasticSearchRepository接口面向对象,提供系列crud方法

    @Test
    public void test() throws IOException {
        DeleteRequest deleteRequest = new DeleteRequest("ems", "emp", "1");
        DeleteResponse deleteResponse = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);
        System.out.println("delete = " + deleteResponse.status());
    }

    @Test
    public void testAddIndex() throws IOException {
        IndexRequest indexRequest = new IndexRequest("ems","emp","1");
        indexRequest.source("{\"name\": \"小小黑\",\n" +
                "   \"age\": 59,\n" +
                "   \"bir\": \"2012-12-12\",\n" +
                "   \"content\":\"这是一个模式,框架,掩码\",\n" +
                "    \"address\":\"上海\"}", XContentType.JSON);
        IndexResponse indexResponse = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
        System.out.println("indexResponse = " + indexResponse.status());
    }

  @Test
    public  void testQuery() throws IOException {
        SearchRequest searchRequest = new SearchRequest("ems");
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        searchSourceBuilder.query(QueryBuilders.matchAllQuery())//执行条件
                           .from(0)
                           .size(20)
                           .postFilter(QueryBuilders.matchAllQuery())
                           .sort("age", SortOrder.DESC)
                           .highlighter(new HighlightBuilder().field("*").requireFieldMatch(false));
        //创建搜素请求
        searchRequest.types("emp").source(searchSourceBuilder);
        SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        SearchHit[] hits = search.getHits().getHits();
        for (SearchHit hit : hits) {
            System.out.println("hit = " + hit);
        }
    }
}

ElasticSearchRepository面向对象

entity.emp

@Data
/**
 * 用在类上,将emp对象映射成es文档
 *  indexName :索引名   要求es服务器中不能存在此索引名
 *  type : 当前索引下创建类型
 *
 */
@Document(indexName = "ems",type = "emp")
public class Emp {
    @Id  //将对象中的id属性与文档中_id一一对应
    private String id;
    //用在属性上代表mapping上的一个字段,type指定字段类型
    @Field(type = FieldType.Text,analyzer = "ik_max_word")
    private String name;
    @Field(type = FieldType.Integer)
    private Integer age;
    @Field(type = FieldType.Date)
    private Date bir;
    @Field(type = FieldType.Text,analyzer = "ik_max_word")
    private String content;
    @Field(type = FieldType.Text,analyzer = "ik_max_word")
    private String address;
}
@SpringBootTest
public class TestEmpRepository {
    @Autowired
    private EmpRepository empRepository;

    //save保存:更新一条文档,id相同更新,不更新部分必须与原始文档相同
    @Test
    public void testSave(){
        Emp a = new Emp();
        a.setId(UUID.randomUUID().toString());
        a.setName("张三");
        a.setBir(new Date());
        a.setAge(25);
        a.setAddress("武当山学院");
        a.setContent("武侠大师,一生创建多种武功,如太极,武当剑法");
        empRepository.save(a);
    }
    @Test
    public void testDelete(){
        empRepository.deleteById("175e1ca8-26ca-4e0a-9476-c40e7630fd49");
    }

    //删除所有文档
    @Test
    public void testDeleteAll(){
        empRepository.deleteAll();
    }

    //检索一条记录
    @Test
    public void testFindOne(){
        Optional<Emp> optional = empRepository.findById("fa71e070-58b5-400c-bc1f-e93add9b11fe");
        System.out.println("optional = " + optional.get());
    }

    //查询所有,排序
    @Test
    public void testFindAll(){
        Iterable<Emp> empRepositoryAll = empRepository.findAll(Sort.by(Sort.Order.desc("age")));
        empRepositoryAll.forEach(emp-> System.out.println("emp = " + emp));
    }

    //分页
    @Test
    public void testFindPage(){
        //参数0 ,当前页减1
        Iterable<Emp> empRepositoryAll = empRepository.search(QueryBuilders.matchAllQuery(), PageRequest.of(0,20));
        empRepositoryAll.forEach(emp-> System.out.println("emp = " + emp));
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值