2015-06-10 71 views
0

我使用solr快速搜索所需的數據,並通過簡單的查詢獲取多個相關數據。SOLR:多個相關數據字段的搜索查詢

我需要一個查詢相關數據,

這裏確切的情況。

猜測,有3種不同類型的數據type:"A"type:"B"的,type:"C"

type:"A"type:"B"type:"B"type:"C"

猜測的父type:"A"已100個數據,type:"B"具有200個數據,type:"C"具有400數據

[ 
    { 
     "id": "1", 
     "name": "x", 
     "type": "A" 
    }, 
    { 
     "id": "2", 
     "name": "y", 
     "type": "A" 
    }, 
    { 
     "id": "3", 
     "name": "z", 
     "type": "A" 
    }, 
    { 
     "id": "10", 
     "name": "xy", 
     "type": "B", 
     "parentID": "1" 
    }, 
    { 
     "id": "11", 
     "name": "yz", 
     "type": "B", 
     "parentID": "1" 
    }, 
    { 
     "id": "1a34", 
     "name": "zwse", 
     "type": "C", 
     "parentID": "10" 
    }, 
    { 
     "id": "1zdfb", 
     "name": "xgbdrt", 
     "type": "C", 
     "parentID": "11" 
    }, 
    { 
     "id": "13", 
     "name": "yyhny", 
     "type": "B", 
     "parentID": "2" 
    }, 
    { 
     "id": "1srtbr", 
     "name": "zrstbrth", 
     "type": "B", 
     "parentID": "2" 
    } 
] 

你可以在這裏看到「id」type:"A"type:"B"的「parentID」,類似地,type:"B"的「id」是「parentID」type:"C"

在此JSON,你可以看到對方, 類型如何對象相關的: 「A」

{ 
    "id": "1", 
    "name": "x", 
    "type": "A" 
} 

是類型的家長: 「B」

{ 
    "id": "10", 
    "name": "xy", 
    "type": "B", 
    "parentID": "1" 
}, 
{ 
    "id": "11", 
    "name": "yz", 
    "type": "B", 
    "parentID": "1" 
} 

和類型: 「B」 是

{ 
    "id": "10", 
    "name": "xy", 
    "type": "B", 
    "parentID": "1" 
} 

類型的父: 「C」

{ 
    "id": "1a34", 
    "name": "zwse", 
    "type": "C", 
    "parentID": "10" 
} 

我需要Solr中這樣的查詢在哪裏可以找到類型: 「A」,並有相關的數據

結果應該包含

type:"A" data > type :"B" data which "parentID"s are related to type:"A" "id"s > type :"C" data which "parentID"s are related to type:"B" "id"s

[ 
    { 
     "id": "1", 
     "name": "x", 
     "type": "A" 
    }, 
    { 
     "id": "10", 
     "name": "xy", 
     "type": "B", 
     "parentID": "1" 
    }, 
    { 
     "id": "11", 
     "name": "yz", 
     "type": "B", 
     "parentID": "1" 
    }, 
    { 
     "id": "1a34", 
     "name": "zwse", 
     "type": "C", 
     "parentID": "10" 
    }, 
    { 
     "id": "1zdfb", 
     "name": "xgbdrt", 
     "type": "C", 
     "parentID": "11" 
    } 
] 

你能幫我嗎,我怎樣才能得到這種類型的相關數據?

我已經通過了所有查詢解析器,但沒有得到任何有用的這種類型的結果。 你能告訴我嗎?如果我錯過任何,可以工作得到這種類型的結果。

在此先感謝

回答

0

我們通過索引包含元素的層次結構中的字段實現這一點,所以你指數:

{ 
    "id": "10", 
    "name": "xy", 
    "type": "B", 
    "parentID": "1", 
    "hierarchy": "A" 
}, 
{ 
    "id": "1a34", 
    "name": "zwse", 
    "type": "C", 
    "parentID": "10", 
    "hierarchy": "A/B" 
}, 

如果有一個文檔的多條路徑,使層次字段多值(這是我們爲我們的類別結構所做的),幷包括通過樹的不同路徑。

"hierarchy": ["A/B", "A/D"] 

與「A/B」作爲自己的直接父一切的選擇,現在可以用過濾查詢完成:fq=hierarchy:A/B。選擇生活在「A/B」的孩子下面某處的所有東西都可以使用通配符查詢來完成:fq=hierarchy:A/B/*

您可能希望在值中包含尾隨「/」,以便能夠在層次結構中表示「此元素及其下的所有元素」(使用A/B /和A/D /作爲值)。使用自選分隔符更改「/」。

還有一些關於Hierarchical Faceting wiki page的其他建議。