ES7.10.1使用的一些心得

更新时间:2023-07-18 07:36:08 阅读: 评论:0

ES7.10.1使⽤的⼀些⼼得
ES 7.10.1 ⽤到的⼀些查询⽅法
前⾔
第⼀次写,记录⼀下⾃⼰⽤到的场景,不⼀定对你有帮助,新⼿的话,可以去看看狂神的视频,个⼈觉得可以的。有啥建议可以提出来。公司项⽬中需要⽤到es,⾃⼰经验不⾜,直接上⼿了es 的最新版。然后发现项⽬中springboot版本⽐较低,之前没有考虑到,然后⼜⼩⼩的学习了⼀下,新版的es相⽐较旧版(⽬前⽤的包 6.4的clint)的话,有些参数必须要。其中_type 这个参数必须要的,但是我感觉⽤处也不是很⼤。欢迎指定,⼀起学习!
⼀、索引的操作
直接上⼿api吧,ElasticSearchCommon 是⾃⼰将所有的索引封装出来的,这⾥是需要⼀个字符串的!
提前准备的话:导⼊springboot封装过后的es(也可以不⽤这样)依赖。然后写⼀下配置类,配置类我贴出来,再注⼊⼀下
配置类
注⼊client,Qualifier 是配置类bean中的⽅法名。不咋懂的话去看狂神教学视频
2012年高考数学试题1.新增索引
// 创建索引请求
CreateIndexRequest createIndex =new CreateIndexRequest(ElasticSearchCommon.LG_SESSION);
// 客户端执⾏请求
CreateIndexRespon createIndexRespon = restHighLevelClient.indices().create(createIndex, RequestOptions.DEFAULT);
2.删除索引
DeleteIndexRequest deletRequest =new DeleteIndexRequest(ElasticSearchCommon.LG_SESSION);
AcknowledgedRespon delete= restHighLevelClient.indices().delete(deletRequest, RequestOptions.DEFAULT);
3.查询索引
GetIndexRequest getIndexRequest =new GetIndexRequest(ElasticSearchCommon.LG_SESSION);
boolean exists = restHighLevelClient.indices().exists(getIndexRequest, RequestOptions.DEFAULT);
⼆、⽂档操作(重点是查询吧)
2.1新增⽂档
2.1.1 单独添加
IndexRequest indexRequest =new IndexRequest(ElasticSearchCommon.LG_SESSION);
笑对人生// 版本低⼀点的话需要加上type类型
SessionEntity ssionEntity =new SessionEntity();
ssionEntity.tId(1);
ssionEntity.tConversationTime(getNowTime());
ssionEntity.tMsgState(1);
ssionEntity.tAddrImages("/addr/images");
ssionEntity.tVipId("VIP545465");
ssionEntity.tCustomerServerName("弟弟1号");
IndexRequest source = indexRequest.JSONString(ssionEntity), XContentType.JSON);
IndexRespon index = restHighLevelClient.index(source, RequestOptions.DEFAULT);
System.out.println("预留内容添加状态:"+index.status());
2.1.2 批量添加
// 创建请求
BulkRequest bulkRequest =new BulkRequest(ElasticSearchCommon.LG_SESSION);
// 创建批量数据
List<ProblemTypeEntity> list =new ArrayList<ProblemTypeEntity>();
list.add(new ProblemTypeEntity(1,"111"));
list.add(new ProblemTypeEntity(2,"222"));
list.add(new ProblemTypeEntity(3,"333"));
list.add(new ProblemTypeEntity(4,"444"));
chest是什么意思list.add(new ProblemTypeEntity(5,"555"));
list.add(new ProblemTypeEntity(6,"666"));
伯瑞英语
list.add(new ProblemTypeEntity(7,"777"));
list.add(new ProblemTypeEntity(8,"888"));
// 循环添加
for(int i =0;i<list.size();i++){
bulkRequest.add(
new IndexRequest(ElasticSearchCommon.LG_SESSION)
/
/.id(""+(i+1)) // 设置es 当中_id,不设置的话是⼀串字符
.(i)),XContentType.JSON)
);
}
BulkRespon bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
System.out.println("循环添加的数据状态:"+bulk.status());
2.2删除⽂档
7.10版可以这样写,根据其他字段条件去查询删除,较新版本的删除这我觉得是最⽅便的
DeleteByQueryRequest deleteByQueryRequest =new DeleteByQueryRequest(ElasticSearchCommon.LG_PROBLEM);
DeleteByQueryRequest deleteByQueryRequest1 = deleteByQueryRequest.Query("id",12));
BulkByScrollRespon bulkByScrollRespon = restHighLevelClient.deleteByQuery(deleteByQueryRequest1, RequestOptions.DEFAULT);        System.out.println("删除了⼏条:"+Status().getDeleted());
⽼⼀点的版本,就必须带上_type,我所有的都叫_type,⽬前没感觉到⽤处,⽬前探索到,删除只能更具_id 去查询
DeleteRequest deleteRequest =new DeleteRequest(ElasticSearchCommon.LG_PROBLEM,"_doc","_id的值");
DeleteRespon delete= restHighLevelClient.delete(deleteRequest, RequestOptions.DEFAULT);
2.3更改⽂档
//第⼀种写法
// 创建请求
bioperformance
UpdateRequest updateRequest =new UpdateRequest(ElasticSearchCommon.LG_SESSION,"这⾥就是_id了");
// 创建需要更改的数据
UrEntity urEntity =new UrEntity("更改后的数据",28, TimeFormat());
// 修改的数据放⼊请求中
updateRequest.JSONString(urEntity),XContentType.JSON);
// 客户端发送请求
UpdateRespon update = restHighLevelClient.update(updateRequest, RequestOptions.DEFAULT);
// 打印状态
System.out.println("更新状态:"+update.status());
2.4查询⽂档(重点)
你要去了解QueryBuilders⾥⾯的⼀些⽅法。
*Query(“key”, obj) 完全匹配,输⼊的查询内容是什么,就会按照什么去查询,并不会解析查询内容,对它分词。*sQuery(“key”, obj1, obj2…) ⼀次匹配多个值
*QueryBuilders. matchQuery(“key”, Obj) 单个匹配,match查询,会将搜索词分词,再与⽬标查询字段进⾏匹配,若分词中的任意⼀个词与⽬标字段匹配上,则可查询到。
*QueryBuilders. multiMatchQuery(“text”, “field1”, “field2”…); 匹配多个字段, field有通配符忒⾏
QueryBuilders. matchAllQuery(); 匹配所有⽂件
QueryBuilders.matchPhraQuery(“supplierName”,param);默认使⽤ match_phra 时会精确匹配查询的短语,需要全部单词和顺序要完全⼀样,标点符号除外
QueryBuilders.wildcardQuery(“supplierName”,""+param+"") ;条件wildcard不分词查询,加(相当于sql中的%)表⽰模糊查询,加keyword表⽰查不分词数据
2.4.1
builderList 我⾃⼰写的操作es库的⼀个⽅法;
随机⼀个⽅法:
SearchRequest archRequest =new SearchRequest(ElasticSearchConstant.LG_PROBLEM);
trouble is a friend中文歌词
MatchQueryBuilder should = QueryBuilders.matchQuery("content", content).operator(Operator.OR);
标志位List<Map<String, Object>> list =builderList(should, archRequest,null,0,5);
HashMap<String,Object> hashMap =new HashMap<String, Object>();
// 分词未搜到则返回热度最⾼的5个数据
if(list.size()<=0){
List<Map<String, Object>> heatList =MostHeat();
hashMap.put("heat","未查询到关键词,返回热度最⾼的五个问题!");
heatList.add(0,hashMap);
return heatList;
}
builderList⽅法:(restHighLevelClient 这个有update、delete、arch、index等,具体的话去了解了解)
//构建构造者
SearchSourceBuilder archSourceBuilder =new SearchSourceBuilder();
archSourceBuilder.timeout(TimeValue.timeValueMillis(1));
// 分页条件
if(!"".equals(page)&&null!= page){
if(page <0){
page =0;
}
archSourceBuilder.from(page);
}
// 分页条件
if(!"".equals(pageSize)&&null!= pageSize){
if(pageSize <=0){
pageSize =1;
}
distribution
archSourceBuilder.size(pageSize);
}
// 排序条件
if(!"".equals(sortName)&&null!= sortName){
archSourceBuilder.sort(sortName, SortOrder.DESC);
}芥蒂
// 查询条件
if(null!= queryBuilder ){
archSourceBuilder.query(queryBuilder);
}
//archSourceBuilder.highlighter().preTags("<p class='one' style='color:red'>").postTags("</p>").field("content");
SearchRequest source = archRequest.source(archSourceBuilder);
SearchRespon arch = restHighLevelClient.arch(source, RequestOptions.DEFAULT);
List<Map<String,Object>> list =new ArrayList<>();
for(SearchHit hit : Hits().getHits()){
Map<String, Object> sourceAsMap = SourceAsMap();
sourceAsMap.put("_id",Id());
//ve("addrImages");
list.add(sourceAsMap);
}老虎吃人
三、附带上kibana 中间的⼀些语法,可以根据这个去尝试⼀下其他Java查询⽅法
3.1多条件查询
customerName.keyword 代表不分词搜索,整体搜索,完全匹配
<,之前⽹上也是说不分词搜索,欢迎⼤佬指定
3.2must(必须),must_not(不必须),shuold(相当于or)
3.3过滤条件(gte,gt,lte,lt相信你们都知道)
3.4限制搜索条件(这⾥表⽰从第0条开始查询5条)、sort(numbers是字段,order不要变,desc降序,asc 升序)排序
3.5⾼亮显⽰(其实就是放了前端代码过来)注意⼀下hightlight的⽤法,⽬前项⽬中还没⽤到,你们可以去探索

本文发布于:2023-07-18 07:36:08,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/1102697.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:查询   分词   需要   数据   搜索   条件
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图