2011-11-01 85 views
7

我想在內容存儲庫中使用一個或多個值作爲多值屬性的輸入參數進行搜索 類似以下內容:查找主類型爲'nt:unstructured'的所有節點屬性'multiprop'(多值屬性)包含值「one」和「two」。JCR SQL2多值屬性搜索

如何將queryString傳遞給queryManager.createQuery應該像loook一樣?

謝謝。

回答

13

您可以像處理其他條件一樣處理多值屬性的條件。例如,下面的查詢會發現有「白色的狗」對「someProp」屬性的值的所有節點:

SELECT * FROM [nt:unstructured] WHERE someProp = 'white dog' 

如果「someProp」屬性有多個值,那麼至少有一個節點符合標準的值將包含在結果中。

要查找具有多值屬性的多個值的節點,只需將多個條件組合在一起即可。例如,下面的查詢將返回有兩個指定值的所有節點:

SELECT * FROM [nt:unstructured] WHERE someProp = 'white dog' 
            AND someProp = 'black dog' 

任何運營商都可以工作,其中包括「喜歡」:

SELECT * FROM [nt:unstructured] WHERE someProp LIKE '%white%' 
            AND someProp LIKE '%black%' 

其它組合是可能的課程。

+1

謝謝。請問:這兩個解決方案是更高性能的?或者他們應該是相同的表現明智? – silverb77

+0

現在,在得到答案之前,我嘗試了一些像SomeProp LIKE'%black%',它似乎相當緩慢......這是因爲我使用LIKE而不是=? – silverb77

+0

最後一個問題請問:關於性能的思考,你寧願使用getNode進行「手動」搜索,並根據輸入參數檢查每個propery的值,否則會執行JCR SQL2 SELECT?非常感謝。 – silverb77