范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

SpringBootElasticSearch实现模糊查询,批量CRUD,排序,分页

  一、导入elasticsearch依赖
  在pom.xml里加入如下依赖         org.springframework.boot       spring-boot-starter-data-elasticsearch 
  非常重要:检查依赖版本是否与你当前所用的版本是否一致,如果不一致,会连接失败!
  二、创建高级客户端import org.apache.http.HttpHost; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;  @Configuration public class ElasticSearchClientConfig {     @Bean     public RestHighLevelClient restHighLevelClient(){         RestHighLevelClient client = new RestHighLevelClient(                 RestClient.builder(                         new HttpHost("服务器IP", 9200, "http")));         return client;     } }三、基本用法1.创建、判断存在、删除索引import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest; import org.elasticsearch.action.support.master.AcknowledgedResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.client.indices.CreateIndexRequest; import org.elasticsearch.client.indices.CreateIndexResponse; import org.elasticsearch.client.indices.GetIndexRequest; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest;  import java.io.IOException;  @SpringBootTest class ElasticsearchApplicationTests {   @Autowired  private RestHighLevelClient restHighLevelClient;   @Test  void testCreateIndex() throws IOException {   //1.创建索引请求   CreateIndexRequest request = new CreateIndexRequest("ljx666");   //2.客户端执行请求IndicesClient,执行create方法创建索引,请求后获得响应   CreateIndexResponse response=     restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);   System.out.println(response);  }   @Test  void testExistIndex() throws IOException {         //1.查询索引请求   GetIndexRequest request=new GetIndexRequest("ljx666");         //2.执行exists方法判断是否存在   boolean exists=restHighLevelClient.indices().exists(request,RequestOptions.DEFAULT);   System.out.println(exists);  }   @Test  void testDeleteIndex() throws IOException {         //1.删除索引请求   DeleteIndexRequest request=new DeleteIndexRequest("ljx666");         //执行delete方法删除指定索引   AcknowledgedResponse delete = restHighLevelClient.indices().delete(request, RequestOptions.DEFAULT);   System.out.println(delete.isAcknowledged());  }  }2.对文档的CRUD
  创建文档:
  注意:如果添加时不指定文档ID,他就会随机生成一个ID,ID唯一。
  创建文档时若该ID已存在,发送创建文档请求后会更新文档中的数据。 @Test void testAddUser() throws IOException {  //1.创建对象  User user=new User("Go",21,new String[]{"内卷","吃饭"});  //2.创建请求  IndexRequest request=new IndexRequest("ljx666");  //3.设置规则 PUT /ljx666/_doc/1  //设置文档id=6,设置超时=1s等,不设置会使用默认的  //同时支持链式编程如 request.id("6").timeout("1s");  request.id("6");  request.timeout("1s");   //4.将数据放入请求,要将对象转化为json格式     //XContentType.JSON,告诉它传的数据是JSON类型  request.source(JSONValue.toJSONString(user), XContentType.JSON);       //5.客户端发送请求,获取响应结果  IndexResponse indexResponse=restHighLevelClient.index(request,RequestOptions.DEFAULT);  System.out.println(indexResponse.toString());  System.out.println(indexResponse.status()); }
  获取文档中的数据: @Test void testGetUser() throws IOException {  //1.创建请求,指定索引、文档id  GetRequest request=new GetRequest("ljx666","1");  GetResponse getResponse=restHighLevelClient.get(request,RequestOptions.DEFAULT);     System.out.println(getResponse);//获取响应结果  //getResponse.getSource() 返回的是Map集合  System.out.println(getResponse.getSourceAsString());//获取响应结果source中内容,转化为字符串    }
  更新文档数据:
  注意:需要将User对象中的属性全部指定值,不然会被设置为空,如User只设置了名称,那么只有名称会被修改成功,其他会被修改为null。  @Test void testUpdateUser() throws IOException {  //1.创建请求,指定索引、文档id  UpdateRequest request=new UpdateRequest("ljx666","6");   User user =new User("GoGo",21,new String[]{"内卷","吃饭"});  //将创建的对象放入文档中  request.doc(JSONValue.toJSONString(user),XContentType.JSON);   UpdateResponse updateResponse=restHighLevelClient.update(request,RequestOptions.DEFAULT);  System.out.println(updateResponse.status());//更新成功返回OK }
  删除文档: @Test void testDeleteUser() throws IOException {  //创建删除请求,指定要删除的索引与文档ID  DeleteRequest request=new DeleteRequest("ljx666","6");   DeleteResponse updateResponse=restHighLevelClient.delete(request,RequestOptions.DEFAULT);  System.out.println(updateResponse.status());//删除成功返回OK,没有找到返回NOT_FOUND }3.批量CRUD数据
  这里只列出了批量插入数据,其他与此类似
  注意:hasFailures()方法是返回是否失败,即它的值为false时说明上传成功  @Test void testBulkAddUser() throws IOException {  BulkRequest bulkRequest=new BulkRequest();  //设置超时  bulkRequest.timeout("10s");   ArrayList list=new ArrayList<>();  list.add(new User("Java",25,new String[]{"内卷"}));  list.add(new User("Go",18,new String[]{"内卷"}));  list.add(new User("C",30,new String[]{"内卷"}));  list.add(new User("C++",26,new String[]{"内卷"}));  list.add(new User("Python",20,new String[]{"内卷"}));   int id=1;  //批量处理请求  for (User u :list){   //不设置id会生成随机id   bulkRequest.add(new IndexRequest("ljx666")     .id(""+(id++))     .source(JSONValue.toJSONString(u),XContentType.JSON));  }   BulkResponse bulkResponse=restHighLevelClient.bulk(bulkRequest,RequestOptions.DEFAULT);  System.out.println(bulkResponse.hasFailures());//是否执行失败,false为执行成功 }4.查询所有、模糊查询、分页查询、排序、高亮显示@Test void testSearch() throws IOException {  SearchRequest searchRequest=new SearchRequest("ljx666");//里面可以放多个索引  SearchSourceBuilder sourceBuilder=new SearchSourceBuilder();//构造搜索条件   //此处可以使用QueryBuilders工具类中的方法  //1.查询所有  sourceBuilder.query(QueryBuilders.matchAllQuery());  //2.查询name中含有Java的  sourceBuilder.query(QueryBuilders.multiMatchQuery("java","name"));  //3.分页查询  sourceBuilder.from(0).size(5);       //4.按照score正序排列  //sourceBuilder.sort(SortBuilders.scoreSort().order(SortOrder.ASC));  //5.按照id倒序排列(score会失效返回NaN)  //sourceBuilder.sort(SortBuilders.fieldSort("_id").order(SortOrder.DESC));   //6.给指定字段加上指定高亮样式  HighlightBuilder highlightBuilder=new HighlightBuilder();  highlightBuilder.field("name").preTags("").postTags("");  sourceBuilder.highlighter(highlightBuilder);     searchRequest.source(sourceBuilder);  SearchResponse searchResponse=restHighLevelClient.search(searchRequest,RequestOptions.DEFAULT);   //获取总条数  System.out.println(searchResponse.getHits().getTotalHits().value);  //输出结果数据(如果不设置返回条数,大于10条默认只返回10条)  SearchHit[] hits=searchResponse.getHits().getHits();  for(SearchHit hit :hits){   System.out.println("分数:"+hit.getScore());   Map source=hit.getSourceAsMap();   System.out.println("index->"+hit.getIndex());   System.out.println("id->"+hit.getId());   for(Map.Entry s:source.entrySet()){    System.out.println(s.getKey()+"--"+s.getValue());   }  } }四、总结1.大致流程
  创建对应的请求 --> 设置请求(添加规则,添加数据等) --> 执行对应的方法(传入请求,默认请求选项)–> 接收响应结果(执行方法返回值)–> 输出响应结果中需要的数据(source,status等) 2.注意事项如果不指定id,会自动生成一个随机id 正常情况下,不应该这样使用 new IndexRequest("ljx777") ,如果索引发生改变了,那么代码都需要修改,可以定义一个枚举类或者一个专门存放常量的类,将变量用final static 等进行修饰,并指定索引值。其他地方引用该常量即可,需要修改也只需修改该类即可。elasticsearch相关的东西,版本都必须一致,不然会报错 elasticsearch很消耗内存,建议在内存较大的服务器上运行elasticsearch,否则会因为内存不足导致elasticsearch自动killed

CBA最新消息!前国手正式被裁,广东功臣无球可打,王芳又升职上海男篮在北京首钢身上拿到了一场胜利,同时也鼓舞了球队的士气,但李春江对于内线球员的表现还是不满,特别是闫鹏飞几乎已经到了被放弃的状态。不过与闫鹏飞比起来,前国手邵英伦就要惨很多了女人自信专访上海安福路洛丽塔小公主,最新辟谣来了曾经以为,50多岁(猜测)身材臃肿的大妈,剃着寸头,经常穿着洛丽塔少女裙出门,定是为吸引眼球博取流量,就如多年前的网红凤姐和芙蓉姐姐。直到前两天,看了她的专访,我才和广大网友一样,参赛门槛低,比赛接地气,上海市首届ToWe奥运会圆满落幕很高兴能代表学校参加ToWe奥运会,这次能够参赛并且夺冠,之前真的没想到。来自田家炳中学的学生刘笑天没有想到,自己连学校的大门都没出,就参加了一项市级比赛,而且还拿了冠军,这次比赛国际航班来了!3月14日起南航恢复长春延吉至首尔航线记者从南航吉林分公司获悉,3月14日起,南航将恢复部分吉林地区至韩国首尔的国际航线,吉林省至韩国首尔航班达到一周9班,长春至首尔每周2班,延吉至首尔每天1班,为周边旅客带来切实便利陕西省小花斩获女子斯诺克世锦赛亚军在日前于泰国曼谷结束的2023女子斯诺克世锦赛中,陕西省19岁小将白雨露首次参赛便交出了亚军的优异答卷。另外值得一提的是,在此次比赛中白雨露单杆曾打出127分,一举打破了尘封20年苹果竟也想吃回头草?中国制造正式摊牌,小米11做得好!不知道屏幕前大家有没有感觉,库克在最近这几年的时间里,做出的决策真的是非常外行,甚至都已经影响到了苹果手机如今的销量!先是iPhone14系列不使用同款芯片,搞得不少苹果的用户怨声这些人,放假半天,多地景区免费!3月8日是国际劳动妇女节,按照国家规定,3月8日当天,妇女放假半天!妇女放假半天的规定,出自国务院出台的全国年节及纪念日放假办法第三条规定,三八妇女节是部分公民放假的节日,因此妇女三八妇女节,贵州多家景区门票免费!三八节日当天贵州这些景区给女性同胞免门票千万不要错过了哦青岩古镇2023年3月8日当天女士进入青岩古镇可免票入园荔波樟江风景名胜区2023年3月8日当天女同胞持身份证可购买免费门票旭光骑行深圳第7站龙岗区园山街道深圳有很多街道都是拆分的,比如前面写过的布吉街道一分为四布吉坂田南湾吉华。同样的,园山,是从横岗拆分出来的。拆分出来干嘛?精细化管理,加快改造升级。所以,骑行园山,就一个感受,乱糟网友吐槽瀑布源头是水管放水,景区回应看破不说破,现在山顶没水,抽的水效果也很好据白鹿视频援引梨视频报道,3月7日,在河南郑州,有网友发视频吐槽,大熊山瀑布源头竟然是水管放水,引起广泛关注。有水,真的!随后,景区工作人员回应称,不用在意瀑布的水是不是抽的,它就桐柏县交通执法大队与淮源景区管委会开展联合执法行动3月6日,桐柏县交通运输综合行政执法大队与淮源风景区管理委员会两部门开展联合执法行动,严厉打击非法违规营运车辆,防范化解旅游客运风险隐患,保障人民群众生命财产安全。随着旅游升温,游
散文热爱生活,知足常乐,以欢喜之心慢度日常作者子墨人生其实很简单,若是懂得,其实就是两笔,一笔写前半生追寻,一笔写后半生的释然。落墨生香,凝思一瞬,笔落不惊风雨,提笔也淡然无声,我们的一生,就这这起落之间,终究会拥有自己的根据五脏生理的正常活动现象和某种反常情况,探知内脏的病理变化胸腹胀满,语声重浊不清,知其中焦积湿语言低微,不能接续,知其气分极虚言语不避亲疏,衣被不自盖复,知其神识已乱大便泄泻无度,知其大肠不固小便不禁,知其膀胱不能约束头为精明之府,头垂不券商分析师眼中的春节变迁对美好生活的期盼终有回响2023年这个春节,券商分析师又把记者的活给干了。多位分析师利用春节假期,观察各行业发展趋势,发表返乡见闻,解读身边的经济学。这其中,申万宏源证券海通证券的分析师最为敬业,他们来自拜仁官方自去年11月手术后,马内首次进行有球训练直播吧1月31日讯当地时间周二上午,拜仁官方宣布球队边锋马内恢复了有球训练。拜仁官网的文章中写道,马内在周二上午带着灿烂的笑容来到塞贝纳大街的训练场,这是他在去年11月接受了腓骨肌临沂人元宵节,去这些地方赏花灯吧正月里,正月正,正月十五闹花灯。在大街小巷还洋溢着过年氛围的时候,元宵节即将来到。元宵节,除了吃汤圆,赏花灯也是节日必不可少的一项活动。元宵节,不少景区公园都已经做足了准备,除了点乐东黄流猪脚饭要凌晨三点才好吃凌晨三点钟猪脚饭美食攻略最地道的美食在街头巷尾,最正宗的味儿在烟火深处。黄流不仅是人文荟萃之地,美食也值得打卡,今天终于吃到传说中的凌晨三点钟猪脚饭。不是下午三点钟,而是凌晨三点钟2023经济升温,缅甸迎来投资热潮1hr一个国内投资项目和九个外商投资项目,获准在仰光省投资2023年1月28日2hr从仰光地区投资委员会获悉已批准一个国内投资项目和九个外商投资项目,在仰光省投资。3hr仰光省投资18世纪的那些女性旅行者,说走就走记者曲鹏18世纪,随着浪漫主义自然主义思潮的兴起,旅行成为时尚,一批敢作敢为的女性纷纷踏上旅行的路途。她们大多出身于上流社会的富豪家庭或世家大族,拥有充足的物质条件,可以尽情游览各850万,再见76人!成费城仅剩短板,管理层信任你,你该承担责任109119,主场面对排名东部倒数第三的魔术,76人阴沟翻船,他们在上半场最多领先超过20分的情况下,被魔术完成了超级大翻盘,第二节后半段76人就有点崩盘的迹象了,只用了半节,他们扫地出门!曼城28岁巨星队内动手与瓜帅冲突,世界杯曾不服C罗本赛季的曼城表现并没有达到大家的期待,毕竟他们可是空降了足坛第二身价哈兰德的。有了这么一位超级前锋球队居然战绩还不如上赛季,很明显曼城内部有着一些不和谐的因素。果然在最近曼城曝光出端粒研究又有新突破!帮助我们保持年轻态此前,英国莱斯特大学在Nature子刊上发布了一项基于40多万人的研究,其结果显示坚持快速行走,或可使人的生理年龄年轻16岁。此次研究中,科学家选取了多达40。6万的中老年参与者,