1. 程式人生 > >59_elasticSearch 通過應用層join實現使用者與部落格的關聯

59_elasticSearch 通過應用層join實現使用者與部落格的關聯

59_通過應用層join實現使用者與部落格的關聯

一、概述

1、構造使用者與部落格資料

在構造資料模型的時候,還是將有關聯關係的資料,然後分割為不同的實體,類似於關係型資料庫中的模型

案例背景:部落格網站, 我們會模擬各種使用者發表各種部落格,然後針對使用者和部落格之間的關係進行資料建模,同時針對建模好的資料執行各種搜尋/聚合的操作

PUT /website/users/1 
{
  "name":     "喬峰",
  "email":    "[email protected]",
  "birthday":      "1980-01-01"
}

PUT /website/blogs/1
{
  "title":    "我的第一篇部落格",
  "content":     "這是我的第一篇部落格,開通啦!!!"
  "userId":     1 
}

一個使用者對應多個部落格,一對多的關係,做了建模

建模方式,分割實體,類似三正規化的方式,用主外來鍵關聯關係,將多個實體關聯起來

2、搜尋喬峰發表的所有部落格

GET /website/users/_search 
{
  "query": {
    "term": {
      "name.keyword": {
        "value": "喬峰"
      }
    }
  }
}
{
  "took": 91,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 0.2876821,
    "hits": [
      {
        "_index": "website",
        "_type": "users",
        "_id": "1",
        "_score": 0.2876821,
        "_source": {
          "name": "喬峰",
          "email": "
[email protected]
", "birthday": "1980-01-01" } } ] } }

比如這裡搜尋的是,1萬個使用者的部落格,可能第一次搜尋,會得到1萬個userId

GET /website/blogs/_search 
{
  "query": {
    "constant_score": {
      "filter": {
        "terms": {
          "userId": [
            1
          ]
        }
      }
    }
  }
}

第二次搜尋的時候,要放入terms中1萬個userId,才能進行搜尋,這個時候效能比較差了

{
  "took": 4,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 1,
    "hits": [
      {
        "_index": "website",
        "_type": "blogs",
        "_id": "1",
        "_score": 1,
        "_source": {
          "title": "喬峰的第一篇部落格",
          "content": "大家好,我是喬峰,這是我寫的第一篇部落格!",
          "userId": 1
        }
      }
    ]
  }
}

上面的操作,就屬於應用層的join,在應用層先查出一份資料,然後再查出一份資料,進行關聯

3、優點和缺點

  • 優點:資料不冗餘,維護方便

  • 缺點:應用層join,如果關聯資料過多,導致查詢過大,效能很差

相關文章

相關推薦

59_elasticSearch 通過應用join實現使用者部落關聯

59_通過應用層join實現使用者與部落格的關聯一、概述1、構造使用者與部落格資料在構造資料模型的時候,還是將有關聯關係的資料,然後分割為不同的實體,類似於關係型資料庫中的模型案例背景:部落格網站, 我們會模擬各種使用者發表各種部落格,然後針對使用者和部落格之間的關係進行資料

springmvc原始碼解讀1--關於原始碼解讀部落的書寫

一、為何要閱讀原始碼 寫了太多了if|else,想要看看別人寫的程式碼如何,有一段時間看到一遍博文Java實現生命週期管理機制,當時就被這精妙的設計思想給蟄伏,同時也深深有感於它編碼風格,感覺這如同一件藝術品一般。講真的這是第一感覺編碼不知是隻有if|else以及curd。所以我開始想著

網站域名、備案、七牛雲圖床重新搭建部落整理

最近碰上了一個問題,七牛雲開始回收測試域名,結果導致我的圖床有些失靈、一些軟體資源都無法下載。其實這個問題在前一段不蒜子統計修改的部落格裡已經有兆頭了。不過當時沒注意。最後還是被逼得只能購買了域名,各類備案,重新搭建圖床。 1 域名購買及備案 在阿里雲上購買域名備案就不具體說明了。詳情參加下

部落的自述

感謝這個CSDN這個平臺。在這裡,我將自己日常的學習內容寫成部落格發表在這裡,希望有朝一日我可以把自己所有部落格分類後面的“學習”二字去掉,從而達到自己能研究的水平。希望大家一起進步,謝謝!學習內容大部分來源市面上非常流行的書籍, 部落格的好處就是可以記錄自己的心得,此外我寫

部落添網易雲外鍾墯之坑

近修吾之部落格,自以無心,亦去不少之坑 以前人之部落格裡看文,顧視耳機裡而奄始歌,往下一翻,兮!驛使,網頁裡還放了一網易雲播放器,網上追究,則一曰網易雲外鍾之玩意兒,猶網易雲樂自生之,吾也去弄一個 開網易雲樂官網(傳門)(必用網頁版)。網易雲外鍾可執一歌,不可執一舉歌單,若放一歌,而於網站上搜歌,入播頁

應用內核的幾種通信方式

物理內存 是什麽 nts iat 其他 輸入緩沖 BE virt getc 應用程序與驅動程序據我所知,細分可以分6種,ReadFile,WirteFile方式的緩沖區設備讀寫,直接方式讀寫,和其他方式讀寫。Io設備控制操作(即DeviceControl)的緩沖內存模式IO

mysql 開發進階篇系列 23 應用優化查詢緩存

http lang 單位 tro source 局限 pooling 內存不足 unit 一.概述       前面章節介紹了很多數據庫的優化措施,但在實際生產環境中,由於數據庫服務器本身的性能局限,就必須要對前臺的應用來進行優化,使得前臺訪問數據庫的壓力能夠減到最小。  

應用(http協議) httphttps區別

在協議分層的TCP/IP(或四層)通訊協議採用了5層的層級結構,5層分別包括:應用層、傳輸層、網路層、資料鏈路層、物理層。5層一些簡單功能和著名協議可參考這篇部落格:https://blog.csdn.net/sophia__yu/article/details/82717115 一.應用層

打造雙層nginx,分發應用

分發層+應用層,雙層nginx 分發層nginx,負責流量分發的邏輯和策略,這個裡面它可以根據你自己定義的一些規則,比如根據productId去進行hash,然後對後端的nginx數量取模 將某一個商品的訪問的請求,就固定路由到一個nginx後端伺服器上去,保證說只會從redis

應用運輸的關係

     與應用層相關的協議有:http,運輸層協議有tcp。      http與tcp的關係怎樣描述呢?     所謂協議,就是一系列動作的有限集合,協議的FSM(狀態機)必須是有限的。應用層的某個程序(程序就是某個二進位制檔案載入到cpu中)採用某個協議,運輸層採用

tcp/ip詳解卷一(筆記4:應用應用協議)

相關文章: tcp/ip詳解卷一(筆記1:概述與IP層協議) tcp/ip詳解卷一(筆記2:UDP及相關的協議) tcp/ip詳解卷一(筆記3:tcp與相關協議) 文章目錄 25 SNMP(簡單網路管理協議) 25.1 SNMP報文 25

【基於SSH框架的個人部落系統04】DAO,ServiceAction

DAO層-資料的增刪改查 J2EE開發人員使用資料訪問物件(DAO)設計模式把底層的資料訪問邏輯和高層的商務邏輯分開.實現DAO模式能夠更加專注於編寫資料訪問程式碼。DAO層的每個類都依賴於SessionFactory,SessionFactory介面負責初始化Hibern

JDK1.6 連線Sqlserver2008R2 驅動程式無法通過使用安全套接字(SSL)加密 SQL Server 建立安全連線

問題背景:由於專案中必須得用JDK6來作為Java環境,於是連線SQLServer 2008R2時出現了com.microsoft.sqlserver.jdbc.SQLServerException: 驅動程式無法通過使用安全套接字層(SSL)加密與 SQL Server 建立安全連線。錯誤:“Java.la

【hssdw25172008的專欄】工作以後,發現平時總要解決很多經典的問題,對於解決的方法,總不知道儲存在哪兒好;經常瀏覽別人的部落格,感覺很好,如果自己可以通過寫博,既保證了學到了知識不被忘卻,還能更多的朋友交流學習!因此,決定寫博

工作以後,發現平時總要解決很多經典的問題,對於解決的方法,總不知道儲存在哪兒好;經常瀏覽別人的部落格,感覺很好,如果自己可以通過寫博,既保證了學到了知識不被忘卻,還能與更多的朋友交流學習!因此,決定寫博...

計算機通訊網路_6.應用

應用層是計算機網路體系結構的最高層,直接為使用者的使用者程序提供服務。在因特網中通過各種應用層協議為不同的應用程序提供服務。應用層協議則是使用者程序間在通訊時所必須遵循的規定。 1.網路應用模式 C/S模式 B/S模式 Peer-to-Peer(P2P)模式 2.域名系統DN

K-means聚類演算法原理分析實際應用案例分析(案例分析另起一篇部落

引言 在資料分析中,我們常常想將看上去相似或者行為形似的資料聚合在一起。例如,對一個營銷組織來說,將不同客戶根據他們的特點進行分組,從而有針對性地定製營銷活動,這很重要。又比如,對學校老師來說,將學生分組同樣能夠有所側重的進行教育活動。分類與聚類是資料探勘領域

手把手教你Tiny4412 Android5.0 定製 按下開發板上的按鍵通過廣播發送到應用

首先,處理按鍵按下後,可以通過傳送廣播讓應用層識別按鍵事件,那麼怎麼來發送,可以找到下面這個檔案:frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java對應這個檔案

應用協議:HTTPHTTPS協議詳解、二者的區別

http協議詳解 1、HTTP協議:超文字傳輸協議 是一種分散式、合作式、多媒體資訊系統服務,面向應用層的協議。是一種通用的,不分狀態的協議。是一種請求/應答協議。 1.1、HTTP/1.0和HTTP/1.1的比較 RFC 1945定義了HTT

1 NXP的BLE協議棧軟體架構應用程式碼分析

1 NXP的BLE協議棧軟體架構與應用層程式碼分析 本章介紹了BLE協議棧軟體架構,並重點分析了應用層的軟體程式碼。 1.1. BLE協議棧軟體架構 本文件學習KW40Z的BLE軟體開發採用流行的IAR嵌入式開發軟體。開啟frdm-kw40z-demo.eww工程專

上網行為、應用協議資料特徵流量特徵分析(招商合作)

                  現在各種網路產品裝置,都已經離不開上網行為管理或應用協議識別這一重要功能,如果您想讓您的產品更具競爭力,就要提高您的產品應用協議識別率,協議特徵庫是網路應用層流量管理產品的生命力,而具備完善的應用協議特徵庫,才能減少對應用的誤識別、漏識