首页 > 编程知识 正文

es数据模型,es索引文档过程

时间:2023-05-06 11:03:46 阅读:149280 作者:4055

1、nested介绍nested :用于嵌套对象、数组的元素是对象的[{},{}]。 此nested类型是object数据类型的专用版本,并对对象数组进行索引,以便可以相互独立地查询它们。 其他相关的ES操作和介绍请参考《ElasticSearch6.5.4快速入门》 2。 对象数组如何展平内部对象字段数组与预期的不同。 由于Lucene没有内部对象的概念,因此Elasticsearch将对象层次扁平化为简单的字段名和值列表。 例如,以下文件: putuser/user _ info/1 { ' group ' : ' man ',' username ' : [ { ' first ' 3360 ' zldyet, ' last ' : ' last ' : '4' }此用户名称字段将被动态添加为类型的字段object,{ 'group' : 'man ',' userName ' 内部转换为' username'first'360[]的' userName.last' : [ '三','四' ]} userName.first和userName.last字段3 .如果需要为使用nested字段的对象数组索引对象数组,并保持数组中每个对象的独立性,则必须使用nested数据类型,而不是object数据类型。 在内部,嵌套对象的索引数组用作单独隐藏文档中的每个对象。 这意味着每个嵌套对象都可以通过查询独立于其他对象。 嵌套文档看起来在文档中有集合字段,但在实现中存在很大的差异。 以下图中的嵌套文档为例,消息1、消息2和消息3位于当前文章所在的文档中,但内部实际上保存为四个独立的文档。

注:设置为nested的文档不能直接查询。 nested查询4,嵌套类型索引put/user { ' mappings ' : } ' user _ info ' : { ' properties ' 3360 } ' username ' 3360 需要创建的' sex ' : { ' type ' : ' keyword ' }、' age':{ 'type': 'long' }、 #手机号码集合' phones ' : { ' type ' 3360 } ' properties ' : { ' phone ' : { ' type ' 3360 ' keyword ' }是' addr ' 附加文档put/user/user _ info/1 ' age ' :20,' phones ' : [ { ' phone ' 3360 ' 19986262233 ',' addr': { ' phone ' : ' 17762550 ' addr ' : '湖北武汉' } put/user/user _ info/2 { ' username ' : '尊敬的列车',' sex ' 360 } { 'phone':'17762556931 ',' addr'3360 '深圳南山' } 6、用Kibana实现搜索文档的##手机号码为19975262233。 地址是湖北宜昌post/user/user _ info/_ search { ' query ' : } ' nested ' : { ' path ' : ' phones ', ' query ' : { ' bool ' : { ' must ' : { ' match ' : { ' phones.phone ' : } 1997526233 }, { ' match ' 3360 { ' phones.addr ' : '湖北宜昌' } } } # #结果{ 'took' : 9,' timed_out' : false,' ' failed' : 0 },' hits' : { 'total' : 1,' max _ score ' :3 } ' hits ' 3360 [ { ' _ index ' 3360 ' us360 ] ' _score':'2',' _ score ' : ' ' _ source ' : { ' username ' : '尊敬的列车',' sex' : '女人',' agage ' phones ' : [ { ' phone ' 33660 ] { ' phone ' : ' 17762556931 ', ' addr' : '深圳南山' }}}}7、基于Java方式的检索文档实现@ testpublicvoidt 25 (throwsioexception (/search request对象searchrequestrequestreque //封装查询条件的bool query.must (query builders.match query (' phones.phone ',' 19975262233 ' ); bool query.must (query builders.match query (' phones.addr ','湖北宜昌')//嵌套查询对象nestedquerybuildernestedquested SearchSourceBuilder对象searchsourcebuilderbuilder=newsearchsourcebuilder (; builder.query (nestedquerybuilder; 在request中加入条件request.source(builder ); //查询searchresponseresponse=resthighlevelclient.search (request,RequestOptions.DEFAULT ); search hit [ ] hits=response.gethits ().get hits ); searchhithit : hits (for ) system.out.println ) hit; }} 运行结果:

{“_ index”:“用户”,“_type' : 'user_info”,“_id' : '2”,“_ score”3360. ' addr' : '湖北宜昌' }、{ ' phone ' : ' 177625555 } ' addr ' : '深圳南山' } 8、注意事项索引中的最大字段数默认为50个,嵌套因为每个嵌套文档都被索引为单独的隐藏文档。 如果在索引中定义了太多字段,则映射可能会爆炸

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。