<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Neo4j入門(六)從計算節(jié)點的出度、入度開始

          共 1239字,需瀏覽 3分鐘

           ·

          2021-11-29 01:59

          ??本文將會介紹一些較高級的Neo4j查詢Cypher語句,先從計算節(jié)點的出度、入度開始。
          ??在此之前,我們先構(gòu)建一個簡單的電影知識圖譜。

          圖譜構(gòu)建

          ??我們將構(gòu)建一個IMDB排名前250的電影知識圖譜,其數(shù)據(jù)來源可訪問網(wǎng)址:https://www.imdb.cn/imdb250/6,電影數(shù)據(jù)示例如下:

          示例電影數(shù)據(jù)

          ??其中節(jié)點的Schema如下:

          節(jié)點類型屬性
          Moviename,language,releaseDate,minutes
          Personname
          Countryname
          Genrename

          其中Movie為電影節(jié)點,Person為人物節(jié)點,包含導(dǎo)演、編劇、主演,Country為國家或地區(qū),Genre為電影類型。關(guān)系Schema如下:

          頭結(jié)點尾結(jié)點關(guān)系備注
          MoviePersondirector電影的導(dǎo)演
          MoviePersoneditor電影的編劇
          MoviePersonactor電影的主演
          MovieCountrycountry電影所屬國家或地區(qū)
          MovieGenrehas電影類型

          根據(jù)上述數(shù)據(jù)源及Schema,我們構(gòu)建的電影圖譜示例如下:

          電影圖譜示例

          Cypher查詢

          1. 查詢節(jié)點的出度、入度

          ??首先我們查詢某個節(jié)點的出度,比如我們想知道肖申克的救贖的出度(即有多少關(guān)系以該節(jié)點為頭結(jié)點),則可以使用如下查詢語句:

          match?(n:Movie{name:?'肖申克的救贖'})?with?n,?size((n)-[]->())?as?s?return?s;

          返回結(jié)果如下:

          s
          9

          ??如果我們想查詢某個節(jié)點的入度,比如我們想知道前250部電影中有多少部是美國拍的,則可以使用如下查詢語句:

          match?(n:Country{name:?'美國'})?with?n,?size((n)<-[]-())?as?s?return?s;

          返回結(jié)果如下:

          s
          186

          1. 匹配多種關(guān)系

          ??接下來我們查詢多種關(guān)系,比如我們想知道阿甘正傳的導(dǎo)演及電影類型,則可以使用如下查詢語句:

          match?p=(n:Movie{name:?'阿甘正傳'})?-[r:director|has]?->?(m)?return?p;

          返回結(jié)果如下圖:

          阿甘正傳的導(dǎo)演及電影類型
          1. 匹配多種類型節(jié)點

          ??匹配多種類型的節(jié)點時,不像匹配多種關(guān)系使用|那么方便,比如我們想知道圖譜中的電影及國家,則可以使用如下查詢語句:

          match?(n)?where?n:Movie?or?n:Country?return?n.name;
          1. 限定條件的節(jié)點出度、入度

          ??比如我們想知道肖申克的救贖的主演和導(dǎo)演數(shù)量,則可以使用如下查詢語句:

          match?(n:Movie{name:?'肖申克的救贖'})?with?n,?size((n)-[:actor|director]->())?as?s?return?s;

          返回結(jié)果如下:

          s
          6

          又比如我們想知道一共有多少部劇情片和愛情片,則可以使用如下查詢語句:

          match?(n:Genre)?where?n.name?=?'劇情'?or?n.name?=?'愛情'?with?n,?size((n)<-[]-?())?as?s?return?n.name,?s;

          返回結(jié)果如下:

          n.name ?s
          "愛情" ? ?15
          "劇情" ? ?116

          1. 按節(jié)點出度、入度排序

          ??比如我們想按照國家所拍攝的電影數(shù)量對國家排序,即對國家節(jié)點按出度進行排序,則可以使用如下查詢語句:

          match?(n:Country)?with?n,?size((n)<-[]-())?as?s?order?by?s?desc?return?n.name,?s;

          則返回結(jié)果如下:

          對國家節(jié)點按出度進行排序
          1. 改變節(jié)點的標(biāo)簽

          ??Neo4j是支持對同一節(jié)點賦予多個標(biāo)簽(label)的,那么我們嘗試著對擁有director、editor、actor關(guān)系的Person節(jié)點再給它們賦予Director、Editor、Actor標(biāo)簽,查詢語句如下:

          match?(n:Movie)?-[r:director]->(m:Person)?set?m:Director?return?(m);

          如下圖:

          節(jié)點類型中已增加了Director、Editor、Actor,但節(jié)點數(shù)量并未增加

          ??有了上述操作,我們就可以知道那些即是導(dǎo)演又是編劇又是主演的人了,查詢語句如下:

          match?(n)?where?n:Director?and?n:Editor?and?n:Actor?return?(n);

          返回結(jié)果如下:

          即是導(dǎo)演又是編劇又是主演的人

          去百度查詢特瑞·瓊斯,也是符合我們的搜索結(jié)果的:
          特瑞·瓊斯

          總結(jié)

          ??從上面的查詢中我們可以看到,知識圖譜可以告訴我們很多有趣的事實,這也是圖譜的魅力所在~
          ??本文將會介紹了一些較高級的Neo4j查詢Cypher語句,感謝閱讀~


          瀏覽 179
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  就操在线| 国产操逼视频网 | 国产青青操娱乐 | 女性草草网站 | 无码操大逼 |