当前位置: 首页 > news >正文

ai写作网站北京通网站建设

ai写作网站,北京通网站建设,接外包网站,php可视化网站开发工具一、区别#xff1a; 0、一般情况下用object 类型来查es中为json对象的字段数据#xff0c;用nested来查es中为JsonArray数组类型的字段数据。 1、默认情况下ES会把JSON对象直接映射为object类型#xff0c;只有手动设置才会映射为nested类型 2、object类型可以直接使用普…一、区别 0、一般情况下用object 类型来查es中为json对象的字段数据用nested来查es中为JsonArray数组类型的字段数据。 1、默认情况下ES会把JSON对象直接映射为object类型只有手动设置才会映射为nested类型 2、object类型可以直接使用普通的逗号.查询比如 {query: {term: {inspector.id: {value: 222}}} }3、nested类型的查询需要使用nested查询 {query: {nested: {path: inspector,query: {term: {inspector.id: {value: 222}}}} } }4、两种查询方式不兼容如果大家想做改动的话需要对java程序进行修改风险比较大。 5、存储方式不同。对象数组在后台是扁平化存储嵌套对象数组是每个对象独立成文档存储。因此对象数据有时会有且条件查询出或结果嵌套对象的文档聚合可能会多计数(除非加reverse_nested)想保持数组中对象的独立性就需要使用嵌套字段类型。 二、Object类型字段 1mapping 注意如果没有写明type比如categoryObjES会默认object类型并且就算查看mapping也不会显示出来 // 所属类目对象类型注意这里没有写明typeES则会默认为objectcategoryObj: {//type:object,properties: {class1: {type: keyword},class2: {type: keyword},class3: {type: keyword}}}2:增加数据 PUT test_index_20211220/e-com/1 {id: 1,name: Loreal/欧莱雅复颜玻尿酸水光充盈导入膨润精华液,brand: 欧莱雅,price: 279,desc: 补水 提拉紧致 淡化细纹,categoryObj: {class1: 欧莱雅,class2: 补水,class3: 面部护理} } 3查询 在样例数据中“categoryObj字段被默认设置为object类型(没有显示设置type)对于对象类型在查询时需要用”.号连接整个字段 GET test_index_20211220/_search {query: {term: {categoryObj.class1: 欧莱雅}} } 4对象数组特性 我们知道了嵌套字段中的对象被ES存储为了独立的文档那对象字段呢ES在后台将对象字段进行打平处理后台其实存储的是扁平结构以categoryObj字段为例 categoryObj: [{class1: 欧莱雅,class2: 补水,class3: 面部护理},{class1: 欧莱雅,class2: 补水,class3: 面部精华},{class1: 雅诗兰黛,class2: 美白,class3: 面霜} ] 后台存储的其实是 {categoryObj.class1: [欧莱雅,欧莱雅,雅诗兰黛],categoryObj.class2: [补水,补水,美白],categoryObj.class3: [面部护理,面部精华,面霜] } 这就牺牲了对象之间的独立性有时候会带来一些影响具体就是某些情况下对对象数组的且查询可能会变成或查询。 这个时候我们去同时查询欧莱雅和美白这两个关键词正常来说是不应该差出来任何文档的因为categoryObj中没有任何一个对象同时具备欧莱雅和美白这两个关键词可事实确不是这样 GET test_index_20211220/_search {query: {bool: {// filter上下文filter: {bool: {must: [{term: {categoryObj.class1: 欧莱雅}},{term: {categoryObj.class2: 美白}}]}}}} } 结果居然将文档查询出来了 所以当字段为数组的时候建议使用nested类型字段。 三、Nested类型字段 1mapping // 所属类目嵌套类型categoryNst: {type: nested,properties: {class1: {type: keyword},class2: {type: keyword},class3: {type: keyword}}}2增加数据 PUT test_index_20211220/e-com/1 {id: 1,name: Loreal/欧莱雅复颜玻尿酸水光充盈导入膨润精华液,brand: 欧莱雅,price: 279,desc: 补水 提拉紧致 淡化细纹,categoryNst: {class1: 欧莱雅,class2: 补水,class3: 面部护理} } 3查询 GET test_index_20211220/_search {query: {nested: {path: categoryNst, #nested对象的查询深度query: {term: {// 在以前的版本中直接写 class2: 补水也是可以的因为已经在外部声明了path// 不知道从哪个版本改了现在必须写 categoryNst.class2: 补水否则报错categoryNst.class2: 补水}}}} } 4 嵌套字段的特性 嵌套字段其实是把其内部成员当做了一条独立文档进行了索引。如何理解这句话呢在上面的数据中categoryNst数组已经有两个对象成员了 ES在后台其实将这两个对象成员当成了两条独立文档进行索引所以ES一共索引了3条文档(一条外部文档两条嵌套字段对象的文档)这点可以从对嵌套字段的terms聚合中看出来 GET test_index_20211220/_search {query: {nested: {path: categoryNst,query: {term: {categoryNst.class2: 补水}}}},aggs: {nestedAgg:{nested: {path: categoryNst},aggs: {termAgg: {terms: {// 这里一样不能写成class2否则虽不报错但聚合无结果。field: categoryNst.class2}}}}} } {took: 6,timed_out: false,_shards: {total: 2,successful: 2,skipped: 0,failed: 0},hits: {total: 1,max_score: 0.18232156,hits: []},aggregations: {nestedAgg: {doc_count: 2,termAgg: {doc_count_error_upper_bound: 0,sum_other_doc_count: 0,buckets: [{key: 补水,doc_count: 2}]}}} } 明明只有一条整体的文档但聚合结果却是2岂不是结果错误了如何才能得到我们需要的结果呢这个时候就要用到反转嵌套(reverse_nested)改写上面查询语句的聚合部分 GET test_index_20211220/_search {size:0,query: {nested: {path: categoryNst,query: {term: {categoryNst.class2: 补水}}}},aggs: {nestedAgg:{nested: {path: categoryNst},aggs: {termAgg: {terms: {field: categoryNst.class2},aggs: {reverseAgg: {reverse_nested: {}}}}}}} } 5java查询 public static void main(String[] args) {//创建ES客户端RestHighLevelClient esClient new RestHighLevelClient(RestClient.builder(new HttpHost(localhost, 9200, http)));//创建搜索对象SearchRequest searchRequest new SearchRequest();searchRequest.indices(user);//构建请求体SearchSourceBuilder searchSourceBuilder new SearchSourceBuilder();//查询数据-对nested类型数据查询searchSourceBuilder.query(QueryBuilders.nestedQuery(check_error, QueryBuilders.termsQuery(check_error.errtype, errtype), ScoreMode.None));//发送请求searchRequest.source(searchSourceBuilder);SearchResponse search null;try {search esClient.search(searchRequest, RequestOptions.DEFAULT);} catch (IOException e) {throw new RuntimeException(e);}//解析结果SearchHits hits search.getHits();for (SearchHit hit : hits) {System.out.println(hit.getSourceAsString());}//关闭ES客户端esClient.close();}四、数组类型字段 1mapping ES中没有专门的数组类型默认情况下任何字段都可以包含一个或者多个值但一个数组中的值必须是同一种类型。 // 数组类型comments: {type: keyword}2增加数据 当数组类型字段(comments)中只有一个数据时 GET test_index_20211220/e-com/1 {_index: test_index_20211220,_type: e-com,_id: 1,_version: 1,found: true,_source: {id: 1,name: Loreal/欧莱雅复颜玻尿酸水光充盈导入膨润精华液,brand: 欧莱雅,price: 279,desc: 补水 提拉紧致 淡化细纹,comments: 还没有用赠品跟欧莱雅旗舰店的同款赠品有差异。味道也不一样} } 可以看到此时的comments还不是数组现在我们增加一条评论覆盖写入一次 PUT test_index_20211220/e-com/1 {id: 1,name: Loreal/欧莱雅复颜玻尿酸水光充盈导入膨润精华液,brand: 欧莱雅,price: 279,desc: 补水 提拉紧致 淡化细纹,comments: [还没有用赠品跟欧莱雅旗舰店的同款赠品有差异。味道也不一样,只有这支玻璃尿酸水光充盈是真的] } 重新查询可以看到commts在索引的时候如果有多个值则会自动转化成了数组且文档版本号1 GET test_index_20211220/e-com/1 {_index: test_index_20211220,_type: e-com,_id: 1,_version: 2,found: true,_source: {id: 1,name: Loreal/欧莱雅复颜玻尿酸水光充盈导入膨润精华液,brand: 欧莱雅,price: 279,desc: 补水 提拉紧致 淡化细纹,comments: [还没有用赠品跟欧莱雅旗舰店的同款赠品有差异。味道也不一样,只有这支玻璃尿酸水光充盈是真的]} } 3查询 此时数组类型就当做正常的字段进行查询即可 GET my_test_index/_search {query: {bool: {must: [{terms: {label: [10,100]}},{term: {name: {value: 旺仔33333}}}]}} }
http://www.hkea.cn/news/14314191/

相关文章:

  • 网站安全监测阿里云建站wordpress
  • aspnet网站开发实例wordpress建站过时了
  • 网站服务合同模板app定制开发制作报价
  • 网站建设怎么收费呀浙江省2012年7月自学考试网站建设与网页设计
  • 怎么看网站是否做推广wordpress 字符集
  • 手机商城 手机网站建设多少钱重庆市建设工程质量网站
  • 巩义专业网站建设公司wordpress腾讯云
  • 深圳建设工程质量检测中心seo咨询推广
  • 怎么提交网站收录昆明网络营销公司哪家好
  • 江苏瀚和建设网站注册消防工程师
  • 仙桃哪里做网站申请注册商标的流程
  • 酒店建设网站的意义全国互联网备案信息查询系统
  • 重庆网站建设求职简历少儿编程加盟费一般多少钱
  • 苏州网站建设相关技术舟山外贸建站公司
  • 怎样做网站链接温州外贸网站建设
  • 有什么可以接单做的网站使用angular2框架做的网站
  • 做网站什么笔记本好用微信小程序开发大赛
  • 网站建设哪家性价比高排版好看的网站界面
  • 网站建站要多少钱舆情系统
  • 最好的汽车科技网站建设域名注册没有网站
  • 营销型网站建设及推广admin后台管理系统
  • 网站建设与管理期中考做微信网站价格
  • 网站做相片wordpress与phpmyadmin
  • 嘉兴网站排名优化报wordpress怎样上传
  • 研发地网站建设动漫做a视频网站有哪些
  • 家居企业网站建设策划定制公众号需要多少钱
  • 瀑布流网站源码下载郑州商务网站建设
  • 网站推广策划书的特点有哪些与网站建设关系密切的知识点
  • 天门网站建设Wordpress变装
  • 怎么做消费信贷网站动漫制作专业正规吗