25-RestHighLevelClient----文档操作

2022/1/18 23:34:31

本文主要是介绍25-RestHighLevelClient----文档操作,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

@SpringBootTest
public class RestHighLevelClientForDocumentTest {

    private RestHighLevelClient restHighLevelClient;

    @Autowired
    public RestHighLevelClientForDocumentTest(RestHighLevelClient restHighLevelClient) {
        this.restHighLevelClient = restHighLevelClient;
    }

    /**
     * 索引/插入一条文档
     */
    @Test
    public void testCreated() throws IOException {
        IndexRequest indexRequest = new IndexRequest("products");
        indexRequest.id("2") //手动指定id,不然生成uuid
                .source("{\"title\": \"日本豆\",\"price\": 2.5,\"created_at\": \"2012-12-12\",\"description\": \"日本豆很好吃\"}", XContentType.JSON);//插入的源数据

        //参数1:索引请求对象  参数2:请求配置对象
        IndexResponse index = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
        System.out.println(index.status());//输出状态
    }

    /**
     * 更新文档
     */
    @Test
    public void testUpdate() throws IOException {
        UpdateRequest updateRequest = new UpdateRequest("products", "1");
        //doc:在保留原始数据的基础上更新
        updateRequest.doc("{\"price\": \"3.5\"}", XContentType.JSON);

        UpdateResponse update = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);
        System.out.println(update.status());
    }

    /**
     * 删除文档
     */
    @Test
    public void testDelete() throws IOException {
        DeleteRequest deleteRequest = new DeleteRequest("products", "2");

        //参数1:删除请求对象  参数2:请求配置对象
        DeleteResponse delete = restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);
        System.out.println(delete.status());
    }

    /**
     * 根据id查询文档
     */
    @Test
    public void testQueryById() throws IOException {
        GetRequest getRequest = new GetRequest("products", "1");

        GetResponse response = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);
        System.out.println("_id:" + response.getId());
        System.out.println("source:" + response.getSourceAsString());
        System.out.println("source:" + response.getSource());
    }

    /**
     * 查询所有
     */
    @Test
    public void testMatchAll() throws IOException {
        SearchRequest searchRequest = new SearchRequest("products");//指定搜索索引
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();//指定条件对象
        sourceBuilder.query(QueryBuilders.matchAllQuery());//查询所有
        searchRequest.source(sourceBuilder);//指定查询条件

        SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);//参数1:搜索请求对象  参数2:请求配置对象

        System.out.println("总条数:" + searchResponse.getHits().getTotalHits().value);
        System.out.println("最大得分:" + searchResponse.getHits().getMaxScore());

        SearchHit[] searchHits = searchResponse.getHits().getHits();
        for (SearchHit searchHit : searchHits) {
            System.out.println("id:"+ searchHit.getId() + "source:" + searchHit.getSourceAsString());
        }
    }

    /**
     * 不同条件查询跟上面如出一辙,只需要改变QueryBuilders条件对象调用的方法即可, 所以我们封装成了query方法
     * 不同条件查询
     */
    @Test
    public void testTermQuery() throws IOException {
        //关键词查询
        this.query(QueryBuilders.termQuery("description", "浣熊"));

        //范围查询
        this.query(QueryBuilders.rangeQuery("price").gt(0).lt(10));

        //前缀查询
        this.query(QueryBuilders.prefixQuery("title", "小浣熊"));

        //通配符查询
        this.query(QueryBuilders.wildcardQuery("title", "小浣熊*"));

        //ids查询 指定多个id
        this.query(QueryBuilders.idsQuery().addIds("1").addIds("2"));

        //multi_match 多字段查询
        //如果查询的字段分词,就把我们输入的关键词分词。否则不会进行分词
        this.query(QueryBuilders.multiMatchQuery("很好吃日本豆").field("title").field("description"));
        this.query(QueryBuilders.multiMatchQuery("很好吃日本豆", "title", "description"));
    }

    //封装的查询方法
    public void query(QueryBuilder queryBuilder) throws IOException {
        SearchRequest searchRequest = new SearchRequest("products");//指定搜索索引
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();//指定条件对象
        sourceBuilder.query(queryBuilder);//关键词查询
        searchRequest.source(sourceBuilder);//指定查询条件

        SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);

        System.out.println("总条数:" + searchResponse.getHits().getTotalHits().value);
        System.out.println("最大得分:" + searchResponse.getHits().getMaxScore());

        SearchHit[] hits = searchResponse.getHits().getHits();
        for (SearchHit hit : hits) {
            System.out.println("id:" + hit.getId() + "---source:" + hit.getSourceAsString());
        }
    }
}


这篇关于25-RestHighLevelClient----文档操作的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程