2015-10-14 43 views
1

我在C#中使用NEST查詢ElasticSearch數據庫(丹麥CVR註冊表)。我試圖制定一個查詢,將查詢此方案:構建嵌套屬性的NEST/ElasticSearch查詢

relations: [ 
    { 
     participant: { 
      key: 123123 
     }, 
     organisations: [ 
      { 
       organisationName: { 
        name: "some string", 
        period: { 
         from: "SOME DATE" 
         to: "SOMEDATE OR NULL" 
        } 
       }, 
       ... more of similar objects .. 
      } 
     ] 
    }, 
    .. more of similar objects .. 
] 

我在這裏的問題是,我需要找到一個有一定participant.key值,而在同一時間有一個特定的組織的文件。 organisationName.name和organisations.organisationName.period.到

缺少或空值我知道我需要使用嵌套查詢來獲取文件,該文件在to字段中同時具有空值,並且名稱中包含特定名稱字段,但最重要的是,我還需要在particiant.key字段中具有特定的密鑰,這是我遇到麻煩的地方。請注意,我檢查的所有3個字段必須位於同一個關係對象中,並且to和name字段必須位於同一個organisationName對象內。

沒有密鑰部分作爲JSON查詢查詢是這樣的:

{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "nested": { 
      "path":  "relations.organisations.organisationName", 
      "score_mode": "max", 
      "query": { 
       "bool": { 
       "must": [ 
        { "match": { "relations.organisations.organisationName.name": "EJERREGISTER" }}, 
        {"filtered": { "filter" : { 
        "missing" : { "field" : "relations.organisations.organisationName.period.to" } 
        } } } 
       ] 
     }}}} 
     ] 
}}} 

希望有人在那裏是在NEST查詢DSL使得這些查詢貼切。我也可以從純ElasticSearch JSON查詢工作,但.NET等價物將成爲我的首選選項:)

在此先感謝!

回答

0

經過一番實驗後,我得出結論,我的問題的正確答案是一個嵌套查詢的查詢,1.檢查密鑰,並且2.有一個嵌套查詢,用於組織需要的其他事情.organisationName對象。

我不能完全證實這一點,但是,因爲我查詢數據庫沒有標記爲嵌套關係的對象(我不能改變的,因爲它是一個政府數據庫)

我解決方法是檢索與我的密鑰相關的所有關係,然後過濾出內存中剩餘的對象,因爲這在我的方案中沒有太多開銷。

編輯:作爲後續,我使用的外部數據庫添加了嵌套子句,它的工作方式如上所述。