2015-03-30 54 views
0

我是MarkLogic的新手,我們正在評估MarkLogic的產品用例。使用MarkLogic(XQuery或同等方法)進行AND OR查詢

我們評估了一些NoSQL數據庫MongoDB的一樣,Couchbase等

我要尋找一個下面類型的查詢搜索。

(條件1或條件2)AND(Condition3 OR Condition4)AND(Condition5)

可以MarkLogic提供這種類型的搜索查詢的?

我剛開始學習MarkLogic並試圖理解架構。

謝謝,薩米爾

回答

0

簡短的回答原來的問題是「是」。 「如何」的細節將取決於用於表達查詢的方法。

reference architecture建議使用JavaNode.js Client APIs如果你使用其中的一個三層的方法,或者如果你使用你的中間層不同的語言HTTP調用到REST API

如果您在MarkLogic的應用程序服務器(通常是兩層體系結構)中工作,也可以使用Search API(如wst所述)。您可以使用XQuery或服務器端JavaScript(如MarkLogic 8)執行此操作。

1

MarkLogic可以使用許多方式處理這種邏輯,如前所述。
例如,你這是怎麼可能設置使用CTS庫(我強烈建議CTS庫,因爲它使用索引好多了,他們的建築是如此靈活得多)搜索查詢:

cts:search(//elementName, 
    cts:and-query((
    cts:element-attribute-value-query(xs:QName("entry"), xs:QName("private"), "true"), 
    cts:or-query((
     cts:element-attribute-value-query(xs:QName("entry"), xs:QName("forced"), "false"), 
     cts:element-attribute-value-query(xs:QName("entry"), xs:QName("forced"), "pending") 
    )) 
    )) 
) 

這段代碼顯示AND和OR邏輯。 cts:and-query()cts:or-query()函數可以獲取節點列表。上面的查詢說:「查找具有private ='true'屬性的元素(稱爲elementName)並且具有以下任一項:forced ='true'或forced ='pending'」。

對於更簡單的數據,你可以通過做一些像使用XQuery謂詞如下:

for $node in $xml/parent/child[@param1 eq "test" AND @param2 eq "OK"]/grandchild[@service eq "yahoo" or @service eq "google"] 
    return $node