【ES】–Elasticsearch的Nested类型介绍

【ES】–Elasticsearch的Nested类型介绍当字段是普通数组类型 其实在 ES 中 每个对象元素的属性值被扁平化存储在了数组中 已丢失了对应关系 因此无法保证搜索的准确

大家好,欢迎来到IT知识分享网。

一、问题现象

问题现象:在实际项目中,一些数组存储的字段,根据匹配条件去查询经常会查询到一些“其他不需要”的数据,为什么会出现这种情况?
—-这种问题现象,就是ES的Object类型的数据扁平化存储问题

二、普通数组类型

普通数组的mapping参数设置

 "word_one": { 
    "properties": { 
    "desc": { 
    "type": "text", "fields": { 
    "keyword": { 
    "type": "keyword", "ignore_above": 256 } } }, "no": { 
    "type": "text", "fields": { 
    "keyword": { 
    "type": "keyword", "ignore_above": 256 } } }, "sid": { 
    "type": "long" }, "sign": { 
    "type": "boolean" } } } 

现在进行搜索sid、desc字段数据。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
现象结论:word_one是普通数组List,多个must匹配条件会匹配整个List数组数据,而不是每个Bean去匹配。

1、为什么普通数组类型匹配不准?

原因分析:当字段是普通数组类型,其实在ES中,每个对象元素的属性值被扁平化存储在了数组中,已丢失了对应关系,因此无法保证搜索的准确。

{ 
    "app_id": "42533", "word_one": [ { 
    "desc": "南京有好高中么", "no": "0963", "sid": 2002, "sign": false }, { 
    "desc": "雨花区面积多大", "no": "05380", "sid": 2003, "sign": false } ] } 

被扁平化存储到ES中,如下所示

 { 
    "app_id"

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/158722.html

(0)
上一篇 2025-01-18 16:45
下一篇 2025-01-18 17:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信