日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

白话Elasticsearch58-数据建模实战_基于nested object实现博客与评论嵌套关系

發(fā)布時(shí)間:2025/3/21 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 白话Elasticsearch58-数据建模实战_基于nested object实现博客与评论嵌套关系 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 概述
  • 官網(wǎng)
  • 示例
    • Object datatype
      • 讓ES自動(dòng)創(chuàng)建索引,插入一條數(shù)據(jù)
      • 查看mapping
      • 需求: 被年齡是28歲的黃藥師評論過的博客
      • 查詢結(jié)果不對原因分析
    • Nested datatype
      • 解決object查詢不對的問題
      • 修改mapping,將comments的類型從object設(shè)置為nested
      • 寫入數(shù)據(jù)
      • 查看mapping
      • nested object 存儲(chǔ)形式
      • 再次查詢
      • score_mode
  • limits on nested mappings and objects


概述

繼續(xù)跟中華石杉老師學(xué)習(xí)ES,第58篇

課程地址: https://www.roncoo.com/view/55


官網(wǎng)

Nested datatype:戳這里

Object datatype:戳這里


示例

Object datatype

讓ES自動(dòng)創(chuàng)建索引,插入一條數(shù)據(jù)

#讓ES自動(dòng)創(chuàng)建索引,插入一條數(shù)據(jù) PUT /website/blogs/1 {"title": "花無缺發(fā)表的一篇帖子","content": "我是花無缺,大家要不要考慮一下投資房產(chǎn)和買股票的事情啊。。。","tags": ["投資","理財(cái)"],"comments": [{"name": "小魚兒","comment": "什么股票啊?推薦一下唄","age": 28,"stars": 4,"date": "2016-09-01"},{"name": "黃藥師","comment": "我喜歡投資房產(chǎn),風(fēng),險(xiǎn)大收益也大","age": 31,"stars": 5,"date": "2016-10-22"}] }

查看mapping

GET /website/_mapping/blogs/

返回:

{"website": {"mappings": {"blogs": {"properties": {"comments": {"properties": {"age": {"type": "long"},"comment": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"date": {"type": "date"},"name": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"stars": {"type": "long"}}},"content": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"tags": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"title": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}}}}}} }

需求: 被年齡是28歲的黃藥師評論過的博客

#被年齡是28歲的黃藥師評論過的博客 GET /website/blogs/_search {"query": {"bool": {"must": [{"match": {"comments.name": "黃藥師"}},{"match": {"comments.age": 28}}]}} }

返回:


查詢結(jié)果不對原因分析

官方文檔: 戳這里

歸根到底 還是object類型數(shù)據(jù)結(jié)構(gòu)的底層存儲(chǔ)導(dǎo)致的查詢不正確

{"title": [ "花無缺", "發(fā)表", "一篇", "帖子" ],"content": [ "我", "是", "花無缺", "大家", "要不要", "考慮", "一下", "投資", "房產(chǎn)", "買", "股票", "事情" ],"tags": [ "投資", "理財(cái)" ],"comments.name": [ "小魚兒", "黃藥師" ],"comments.comment": [ "什么", "股票", "推薦", "我", "喜歡", "投資", "房產(chǎn)", "風(fēng)險(xiǎn)", "收益", "大" ],"comments.age": [ 28, 31 ],"comments.stars": [ 4, 5 ],"comments.date": [ 2016-09-01, 2016-10-22 ] }

object類型底層數(shù)據(jù)結(jié)構(gòu),會(huì)將一個(gè)json數(shù)組中的數(shù)據(jù),進(jìn)行扁平化

所以,直接命中了這個(gè)document,name=黃藥師,age=28,在范圍之內(nèi),正好符合,所以被查詢出來了。


Nested datatype

解決object查詢不對的問題

引入nested object類型,來解決object類型底層數(shù)據(jù)結(jié)構(gòu)導(dǎo)致的問題


修改mapping,將comments的類型從object設(shè)置為nested

修改mapping,將comments的類型從object設(shè)置為nested

DELETE websitePUT /website {"mappings": {"blogs": {"properties": {"comments": {"type": "nested", "properties": {"name": { "type": "text" },"comment": { "type": "text" },"age": { "type": "short" },"stars": { "type": "short" },"date": { "type": "date" }}}}}} }

寫入數(shù)據(jù)

PUT /website/blogs/1 {"title": "花無缺發(fā)表的一篇帖子","content": "我是花無缺,大家要不要考慮一下投資房產(chǎn)和買股票的事情啊。。。","tags": [ "投資", "理財(cái)" ],"comments": [ {"name": "小魚兒","comment": "什么股票啊?推薦一下唄","age": 28,"stars": 4,"date": "2016-09-01"},{"name": "黃藥師","comment": "我喜歡投資房產(chǎn),風(fēng),險(xiǎn)大收益也大","age": 31,"stars": 5,"date": "2016-10-22"}] }

查看mapping

#查看mapping GET /website/_mapping/blogs/

返回:

{"website": {"mappings": {"blogs": {"properties": {"comments": {"type": "nested","properties": {"age": {"type": "short"},"comment": {"type": "text"},"date": {"type": "date"},"name": {"type": "text"},"stars": {"type": "short"}}},"content": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"tags": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"title": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}}}}}} }

nested object 存儲(chǔ)形式

這樣的話,nested object 存儲(chǔ)如下:

{ "comments.name": [ "小魚兒" ],"comments.comment": [ "什么", "股票", "推薦" ],"comments.age": [ 28 ],"comments.stars": [ 4 ],"comments.date": [ 2014-09-01 ] } { "comments.name": [ "黃藥師" ],"comments.comment": [ "我", "喜歡", "投資", "房產(chǎn)", "風(fēng)險(xiǎn)", "收益", "大" ],"comments.age": [ 31 ],"comments.stars": [ 5 ],"comments.date": [ 2014-10-22 ] } { "title": [ "花無缺", "發(fā)表", "一篇", "帖子" ],"body": [ "我", "是", "花無缺", "大家", "要不要", "考慮", "一下", "投資", "房產(chǎn)", "買", "股票", "事情" ],"tags": [ "投資", "理財(cái)" ] }

再次查詢

GET /website/blogs/_search {"query": {"bool": {"must": [{"match": {"title": "花無缺"}},{"nested": {"path": "comments","query": {"bool": {"must": [{"match": {"comments.name": "黃藥師"}},{"match": {"comments.age": 28}}]}}}}]}} }


改成31的呢


score_mode

score_mode:max,min,avg,none,默認(rèn)是avg

如果搜索命中了多個(gè)nested document,如何把多個(gè)nested document的分?jǐn)?shù)合并為一個(gè)分?jǐn)?shù)


limits on nested mappings and objects

總結(jié)

以上是生活随笔為你收集整理的白话Elasticsearch58-数据建模实战_基于nested object实现博客与评论嵌套关系的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。