java客户端操作Elasticsearch

java客户端操作ES

        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>6.8.0</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>transport</artifactId>
            <version>6.8.0</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.plugin</groupId>
            <artifactId>transport-netty4-client</artifactId>
            <version>6.8.0</version>
        </dependency>
public class TestDocument {

    private TransportClient transportClient;

    @Before
    public void before() throws UnknownHostException {
        //创建客户端
        this.transportClient = new PreBuiltTransportClient(Settings.EMPTY);
        //设置操作es的主机和端口
        transportClient.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.149.129"),9300));
    }
    @After
    public void after(){
        transportClient.close();
    }

    //添加文档
    @Test
    public  void testCreate(){

        User user=new User("1","小红",23,new Date(),"我们在疫情下努力学习","上海");
        
        //转为json
        String json = JSONObject.toJSONString(user);

        IndexResponse indexResponse = transportClient.prepareIndex("ems", "emp", user.getId()).setSource(json, XContentType.JSON).get();

        System.out.println("indexResponse = " + indexResponse.status());

    }

    //添加文档(自动id)
    @Test
    public  void testCreateAutoId(){

        User user=new User(null,"小羊",28,new Date(),"我们在疫情下好好听课","南京");

        //转为json
        String json = JSONObject.toJSONString(user);

        IndexResponse indexResponse = transportClient.prepareIndex("ems", "emp").setSource(json, XContentType.JSON).get();

        System.out.println("indexResponse = " + indexResponse.status());
    }

    //更新文档
    @Test
    public  void testUpdate(){
        User user = new User();
        user.setContent("我们在疫情下学习框架");
        user.setBir(new Date());
        //转为json
        String json = JSONObject.toJSONStringWithDateFormat(user,"yyyy-MM-dd");

        UpdateResponse updateResponse = transportClient.prepareUpdate("ems", "emp", "1").setDoc(json, XContentType.JSON).get();

        System.out.println("indexResponse = " + updateResponse.status());
    }
}


    //删除文档
    @Test
    public  void testDelete(){
        DeleteResponse deleteResponse = transportClient.prepareDelete("ems", "emp", "YiJTXnQBEtzuYn29C38i").get();
        System.out.println("deleteResponse = " + deleteResponse.status());
    }

    //查询一条文档
    @Test
    public  void testFindOne() throws ParseException {
        GetResponse getResponse = transportClient.prepareGet("ems", "emp", "1").get();
        System.out.println("deleteResponse = " + getResponse.getSourceAsString());
        Map<String,Object> sourceAsMap = getResponse.getSourceAsMap();
        User user = new User();
        user.setId(sourceAsMap.get("id").toString());
        user.setBir(new SimpleDateFormat("yyyy-MM-dd").parse(sourceAsMap.get("bir").toString()));
        System.out.println("user = " + user);
    }
}

    //各种查询,查询所有
    @Test
    public void testSearch(){
        //查询条件
        MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
        SearchResponse searchResponse = transportClient.prepareSearch("ems")
                .setTypes("emp")   // 指定类型
                .setQuery(matchAllQueryBuilder)  //指定查询条件
                .get();//执行查询

        System.out.println("总条数"+searchResponse.getHits().getTotalHits());
        System.out.println("最大得分"+searchResponse.getHits().getMaxScore());
        SearchHit[] hits = searchResponse.getHits().getHits();
        for (SearchHit hit : hits) {
            System.out.println("hit = " + hit.getSourceAsString());
        }
    }

  //termQuery
    @Test
    public void testQuery(){
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("content", "框架");
        SearchResponse searchResponse = transportClient.prepareSearch("ems")
                .setTypes("emp")
                .setQuery(termQueryBuilder)
                .get();

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

    //批量操作
    @Test
    public void testBulk(){
        User user = new User("12","张三丰",23,new Date(),"太极拳创始人","武当山");
        //添加
        IndexRequest indexRequest = new IndexRequest("ems","emp",user.getId()).source(JSONObject.toJSONStringWithDateFormat(user,"yyyy-MM-dd"),XContentType.JSON);
        //删除
        DeleteRequest deleteRequest = new DeleteRequest("ems","emp","YSJSXnQBEtzuYn29oH92");
        //修改
        User user1 = new User();
        user1.setContent("这是一个修改后的spring框架");
        UpdateRequest updateRequest = new UpdateRequest("ems","emp","YyJTXnQBEtzuYn29Vn9m").doc(JSONObject.toJSONString(user1),XContentType.JSON);
        //返回批量更新对象
        BulkRequestBuilder bulkRequestBuilder = transportClient.prepareBulk();

        BulkResponse bulkItemResponses = bulkRequestBuilder.add(indexRequest).add(deleteRequest).add(updateRequest).get();

        for (BulkItemResponse bulkItemRespons : bulkItemResponses) {
            System.out.println("bulkItemRespons = " + bulkItemRespons.status());
        }
    }
}

Query

public class TestDocument {
    private TransportClient transportClient;

    @Before
    public void before() throws UnknownHostException {
        //创建客户端
        this.transportClient = new PreBuiltTransportClient(Settings.EMPTY);
        //设置操作es的主机和端口
        transportClient.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.149.129"),9300));
    }
    @After
    public void after(){
        transportClient.close();
    }

    @Test
    public  void testQuery(){
        //查询所有
        MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
        //termQuery
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("content","太极");
        //rangeQuery
        RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("age").gte(0).lte(25);
        //wildcardQuery 通配符
        WildcardQueryBuilder wildcardQueryBuilder = QueryBuilders.wildcardQuery("content", "框?");
        //prefixQuery前缀查询
        PrefixQueryBuilder prefixQueryBuilder = QueryBuilders.prefixQuery("content", "框");
        //ids 查询
        IdsQueryBuilder idsQueryBuilder = QueryBuilders.idsQuery().addIds("12").addIds("YyJTXnQBEtzuYn29Vn9m");
        //fuzz模糊查询
        FuzzyQueryBuilder fuzzyQueryBuilder = QueryBuilders.fuzzyQuery("content", "框架");
        //bool query
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery().must(QueryBuilders.termQuery("content", "spring"));

        //调用方法
        testResult(idsQueryBuilder);

    }

    //用来输出搜索结果
    public void testResult(QueryBuilder queryBuilder){
        SearchResponse searchResponse = transportClient.prepareSearch("ems")
                .setTypes("emp")
                .setQuery(queryBuilder)
                .setFrom(0) //起始条数
                .setSize(20) //设置每页展示条数
               // .setSource(SearchSourceBuilder.searchSource().fetchSource("*","age"))   执行结果中返回哪些字段
                .addSort("age", SortOrder.DESC)  //设置降序排序,asc为升序
                .get();

        System.out.println("总条数"+searchResponse.getHits().getTotalHits());
        System.out.println("最大得分"+searchResponse.getHits().getMaxScore());
        SearchHit[] hits = searchResponse.getHits().getHits();
        for (SearchHit hit : hits) {
            System.out.println("hit = " + hit);
        }
    }
}

高亮查询

public class TestDocumentHight {
    private TransportClient transportClient;

    @Before
    public void before() throws UnknownHostException {
        //创建客户端
        this.transportClient = new PreBuiltTransportClient(Settings.EMPTY);
        //设置操作es的主机和端口
        transportClient.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.149.129"),9300));
    }
    @After
    public void after(){
        transportClient.close();
    }


    /**
     * 高亮查询
     */
    @Test
    public  void testQuery(){

        List<User> users = new ArrayList<>();

        //创建highlightBuilder
        HighlightBuilder highlightBuilder = new HighlightBuilder().field("*").requireFieldMatch(false)
                .preTags("<span style='color:red;'>")
                .postTags("</span>");

        SearchResponse searchResponse = transportClient.prepareSearch("ems")
                .setTypes("emp")
                .setQuery(QueryBuilders.multiMatchQuery("框架","name","content"))
                .highlighter(highlightBuilder)//高亮处理
                .get();


        SearchHit[] hits = searchResponse.getHits().getHits();

        for (SearchHit hit : hits) {

            User user = new User();
            //原始数据封装
            Map<String,Object> sourceAsMap = hit.getSourceAsMap();
            user.setId(hit.getId());
            user.setName(sourceAsMap.get("name").toString());
            user.setName(sourceAsMap.get("name").toString());
            user.setAge(Integer.valueOf(sourceAsMap.get("age").toString()));
            try {
                user.setBir(new SimpleDateFormat("yyyy-MM-dd").parse(sourceAsMap.get("bir").toString()));
            } catch (ParseException e) {
                e.printStackTrace();
            }
            user.setContent(sourceAsMap.get("content").toString());
            user.setAddress(sourceAsMap.get("address").toString());
            //高亮处理
            Map<String, HighlightField> highlightFields = hit.getHighlightFields();
            if(highlightFields.containsKey("name")){
                user.setName(highlightFields.get("name").fragments()[0].toString());
            }
            if(highlightFields.containsKey("content")){
                user.setContent(highlightFields.get("content").fragments()[0].toString());
            }
            users.add(user);
        }

        users.forEach(user -> System.out.println("user = " + user));
    }
}

过滤查询

  /**
     * 过滤查询
     */
    @Test
    public  void testQuery() {
        SearchResponse searchResponse = transportClient.prepareSearch("ems")
                .setTypes("emp")
                .setPostFilter(QueryBuilders.rangeQuery("age").gte(0).lte(25))
                .setQuery(QueryBuilders.matchAllQuery())
                .get();

        SearchHit[] hits = searchResponse.getHits().getHits();
        for (SearchHit hit : hits) {
            System.out.println("hit = " + hit);
        }
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值