簡體   English   中英

使用MarkLogic進行AND \\ OR查詢搜索(XQuery或同等查詢)

[英]AND\OR Query search using MarkLogic (XQuery or equivalent)

我是MarkLogic的新手,我們正在為產品用例評估MarkLogic。

我們評估了少數NoSQL數據庫,例如MongoDB,Couchbase等。

我正在尋找以下類型的查詢搜索。

(條件1或條件2)與(條件3或條件4)與(條件5)

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

我才剛剛開始學習MarkLogic並試圖了解該體系結構。

謝謝,Sameer

是的,MarkLogic為此類功能提供了一些高級庫。 看一下Search API。

從這里開始: https : //developer.marklogic.com/learn/2009-07-search-api-walkthrough

更詳盡的文檔在這里: https : //docs.marklogic.com/guide/search-dev/search-api

如上所述,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'或force ='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

原始問題的簡短答案是“是”。 “如何”的細節將取決於用於表達查詢的方法。

如果您使用JavaNode.js客戶端API中的一種,則參考體系結構建議使用三層方法;如果在中間層中使用其他語言,則建議使用HTTP調用REST API

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM