2013-11-22 61 views
1

我正在嘗試做一些(應該)很簡單的事情。也許我錯過了一些東西。檢索/存儲Freebase中的所有相關演員

我想獲得一個人的合作人員的完整列表。我的最終目標是找出最常與誰合作的人(以任何可能的關係)

例如:Robert De Niro已與喬·派西共同執行7次,但指示他兩次。我想要一張有9個條目的表格。

我可以使用主題API,但只返回電影列表。然後我必須執行10多個API查詢才能獲得每部電影的演員表。取而代之,代碼是一場噩夢。

如果我使用MQL搜索,我只能搜索電影是Robert De Niro具有出演,但不是每部電影他曾執導過的或書面的,或生產,出演,基本上我只能通過搜索1次角色。

有沒有更好的方法?我需要的列表,以結束:

Movies

Actors/Crew People

RolesMoviesPeople

我目前做的:

  • 搜索Robert De Niro並獲得機器ID
  • 做的是MID的話題搜索,返回電影MID的他已經在
  • 工作做每部電影MID的話題搜索的列表,以及創紀錄的領域,如directed_by,主演,produced_by等

由於你可以看到這是一個非常昂貴的操作。以這種方式避免重複也非常困難(儘管我正在處理它)

編輯:這是我當前的MQL查詢(由於某種原因,它只適用於我指定了兩個actor名稱的情況,但這是另一個。問題

$query = array(array(
         'a:starring'=>array('actor'=>'Joe Pesci'), 
         'b:starring'=>array('actor'=>'Robert De Niro'), 
         'directed_by'=>null, 
         'produced_by'=>array(), 
         'written_by'=>array(), 
         'executive_produced_by'=>array(), 
          'name'=>null, 
          'mid'=>null, 
         'starring'=>array(array('actor'=>array('mid'=>null, 
            'name'=>null))), 
         'type'=>'/film/film' 
         )); 

的MQL:

[{ 
    "a:starring": 
     {"actor":"Joe Pesci"}, 
    "b:starring": 
     {"actor":"Robert De Niro"}, 
    "directed_by":null, 
    "produced_by":[], 
    "written_by":[], 
    "executive_produced_by":[], 
    "name":null, 
    "mid":null, 
    "starring": 
     [{"actor": 
      {"mid":null,"name":null}}], 
    "type":"\/film\/film"}] 

回答

2

你可以做到這一切,與不同的子查詢單MQL查詢定向/寫/演過性能只要確保你使每個子查詢可選。 。

例如:

[{ 
    "a:starring": { 
    "actor": "Joe Pesci" 
    }, 
    "b:starring": { 
    "actor": "Robert De Niro" 
    }, 
    "directed_by": [{ 
    "id": null, 
    "name": null, 
    "optional": true 
    }], 
    "produced_by": [{ 
    "id": null, 
    "name": null, 
    "optional": true 
    }], 
    "written_by": [{ 
    "id": null, 
    "name": null, 
    "optional": true 
    }], 
    "executive_produced_by": [{ 
    "id": null, 
    "name": null, 
    "optional": true 
    }], 
    "name": null, 
    "mid": null, 
    "starring": [{ 
    "actor": { 
     "mid": null, 
     "name": null 
    } 
    }], 
    "type": "/film/film" 
}] 
+0

你會這麼好心提供一個示例查詢? 用我當前正在使用的查詢更新帖子。這是我第一次使用MQL,文檔非常混亂。我看到可選標誌,但沒有返回任何結果。或者,如果您知道從API獲取錯誤消息的任何方式,那也可以幫助(如果查詢在某些方面不正確,則返回NULL) – sricks

+0

如果添加MQL(而不是PHP或當前的任何),我會考慮爲你修改它。 API確實會返回錯誤查詢的錯誤。對於不匹配主題的查詢,它將返回null或空集。通過不使用「可選」,您會過度限制查詢,因此它不會返回任何結果。 –

+0

謝謝,我剛剛更新了JSON數組的問題。 – sricks

-1

我不知道,但MQL標準SQL會是這樣的:

Select 
p.Name + ' has worked with '+p2.name+' on the movie '+m.Name 
from Person p 
join Roles r on r.PersonId=p.Id 
join Movie m on m.Id=r.MovieId 
join Roles r2 on r.MovieId=m.Id and r2.Id <> r.Id 
join Person p2 on p2.Id=r2.PersonId