zoukankan      html  css  js  c++  java
  • java操作ELasticSearch

    基于springboot:

    user:

    @Data //getset 
    @AllArgsConstructor //有参构造函数
    @NoArgsConstructor  //无参构造函数
    @Component   //声明它是spring的一个组件
    public class User {
        private String name;
        private int age;
    }
    

      测试添加文档:

     @Test
        void testAddDocument() throws IOException {
            //创建对象
            User user = new User("ElasticSearch", 3);
            //创建请求
            IndexRequest request = new IndexRequest("index1");
            //规则
            request.id("1");
            request.timeout(TimeValue.timeValueSeconds(1));
            //将数据放入请求
            request.source(JSON.toJSONString(user), XContentType.JSON);
            //客户端发送请求
            IndexResponse index = client.index(request, RequestOptions.DEFAULT);
            System.out.println(index.toString());
            
        }
    

      结果:

    测试文档是否存在

       @Test
        void testIsExists() throws IOException {
            GetRequest request = new GetRequest("index1", "1");
            //不获取 _source 上下文
            request.fetchSourceContext(new FetchSourceContext(false));
            boolean exists = client.exists(request, RequestOptions.DEFAULT);
            System.out.println(exists);
        }
    

      结果:

    获取文档内容

      /*获取文档内容*/
        @Test
        void testGetDocument() throws IOException {
            GetRequest request = new GetRequest("index1", "1");
            GetResponse getResponse = client.get(request, RequestOptions.DEFAULT);
            System.out.println(getResponse.getSourceAsString());//打印文档内容
            System.out.println(getResponse);
        }  

     结果 :

     更新文档内容:

       @Test
        void testUpdateRequest() throws IOException {
            UpdateRequest request = new UpdateRequest("index1", "1");
            request.timeout("1s");
            User user = new User("ElasticSearch学习", 18);
            request.doc(JSON.toJSONString(user),XContentType.JSON);
            UpdateResponse response = client.update(request, RequestOptions.DEFAULT);
            System.out.println(response.status());
        }
    

      结果:

     删除文档内容

        /*删除文档内容*/
        @Test
        void testDeleteRequest() throws IOException {
            DeleteRequest deleteRequest = new DeleteRequest("index1", "1");
            deleteRequest.timeout("1s");
            DeleteResponse deleteResponse = client.delete(deleteRequest, RequestOptions.DEFAULT);
            System.out.println(deleteResponse.status());
        }
    

      结果:

    批量插入:

      /*批量插入*/
        @Test
        void testBulkRequest() throws IOException {
            BulkRequest bulkRequest = new BulkRequest();
            bulkRequest.timeout("10s");
            ArrayList<Object> arrayList = new ArrayList<>();
            arrayList.add(new User("张三",12));
            arrayList.add(new User("李四",15));
            arrayList.add(new User("王五",22));
            arrayList.add(new User("赵七",26));
            arrayList.add(new User("王八",31));
            arrayList.add(new User("擎九",20));
            for (int i = 0; i <arrayList.size() ; i++) {
                bulkRequest.add(
                        new IndexRequest("index1")
                        .id(""+(i+1))  //id可要可不要
                                //转json数据
                        .source(JSON.toJSONString(arrayList.get(i)),XContentType.JSON));
            }
            BulkResponse bulk = client.bulk(bulkRequest, RequestOptions.DEFAULT);
            System.out.println(bulk.hasFailures());//是否失败
        }
    

      结果:

     精确条件查询

    //精确条件查询
        @Test
        void testSearch() throws IOException {
            SearchRequest searchRequest = new SearchRequest("index1");
            //构建搜索条件
            SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
    
            //条件查询  如果查询条件为中文 需要在属性添加 .keyword 例如: QueryBuilders.termQuery("name.keyword","张三");
            TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name.keyword","张三");
            //查询所有
            MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
           // 分页
            /*一页多少条*/
            sourceBuilder.size(20);
            /*从第几个开始*/
            sourceBuilder.from(0);
            sourceBuilder.query(termQueryBuilder);
            //  sourceBuilder.query();查询所有
            //设置查询时间 如果过了60s将不再查询
            sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
            searchRequest.source(sourceBuilder);
    
            SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
            System.out.println(JSON.toJSONString(searchResponse.getHits()));
            System.out.println("+++++++++++++");
            for (SearchHit documentFields : searchResponse.getHits().getHits()) {
                System.out.println(documentFields.getSourceAsMap());
            }
        }
    

      结果:

     模糊查询

     //模糊查询
        @Test
        void testFuzzyQuery() throws IOException{
            SearchRequest searchRequest = new SearchRequest("index1");
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            searchSourceBuilder.query(QueryBuilders.matchQuery("name","张"));
            searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
            searchRequest.source(searchSourceBuilder);
            SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);
            System.out.println(response.getHits());
            for (SearchHit searchHit : response.getHits().getHits()) {
                System.out.println(searchHit.getSourceAsMap());
            }
        }
    

      结果:

    高亮搜索:

      //高亮搜索
        @Test
       void  testHighlightSearch() throws IOException {
            //搜索条件
           SearchRequest searchRequest = new SearchRequest("index");
           SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
           searchSourceBuilder .query(QueryBuilders.matchQuery("name.keyword","张三")) //精确匹配
                               .timeout(new TimeValue(60, TimeUnit.SECONDS))
                               .highlighter(new HighlightBuilder()
                               .field("name.keyword") //搜索字段
                               .requireFieldMatch(false) // 只需一个高亮
                               .preTags("<span style='coler:red'>")
                               .postTags("</span>"));
           //执行搜索
           searchRequest.source(searchSourceBuilder);
           SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT);
           //解析结果
           List<Object> queryList = new LinkedList<>();
           for (SearchHit documentFields : search.getHits().getHits()) {
               Map<String, Object> sourceAsMap = documentFields.getSourceAsMap();//原来的结果
               HighlightField field = documentFields.getHighlightFields().get("name.keyword");
               //解析高亮的字段,将原来的字段替换成高亮字段
               Text[] texts = field.fragments();
               String n_text ="";
               for (Text text : texts) {
                   n_text+= text;
               }
               sourceAsMap.put("name",n_text);//高亮字段替换原来的内容
               queryList.add(sourceAsMap);
    
           }
           queryList.forEach((a)-> System.out.println(a));
    
       }
    

      结果:

  • 相关阅读:
    JSP中9大内置对象类型
    使用JSP/Servalet技术开发新闻发布系统------JSP数据交互一
    BZOJ5306: [Haoi2018]染色
    BZOJ4695: 最假女选手
    BZOJ4355: Play with sequence
    BZOJ3771: Triple
    BZOJ4057: [Cerc2012]Kingdoms
    BZOJ3302: [Shoi2005]树的双中心
    BZOJ4036: [HAOI2015]按位或
    12.24 ~ 12.30周训练计划+总结
  • 原文地址:https://www.cnblogs.com/chenjiahao9527/p/13804379.html
Copyright © 2011-2022 走看看