大家好,欢迎来到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