AND \ OR使用MarkLogic查询搜索(XQuery或等效)

时间:2015-03-30 19:22:11

标签: xquery marklogic

我是MarkLogic的新手,我们正在针对我们的产品用例评估MarkLogic。

我们评估了很少的NoSQL数据库,如MongoDB,Couchbase等。

我正在寻找以下类型的查询搜索。

(Condition1 OR Condition2)AND(Condition3 OR Condition4)AND(Condition5)

MarkLogic可以提供此类搜索查询吗?

我刚开始学习MarkLogic并尝试了解架构。

谢谢, 萨米尔

3 个答案:

答案 0 :(得分:2)

是的,MarkLogic为此类功能提供了一些高级库。看看Search API。

从这里开始:https://developer.marklogic.com/learn/2009-07-search-api-walkthrough

此处提供了更全面的文档:https://docs.marklogic.com/guide/search-dev/search-api

答案 1 :(得分: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)。 AND具有以下任一项:forced =' true'或强迫='待定'"。

对于更简单的数据,您可以通过执行以下操作来使用xQuery谓词:

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

答案 2 :(得分:0)

对原始问题的简短回答是"是"。细节"如何"将取决于用于表达查询的方法。

reference architecture建议使用JavaNode.js Client APIs进行三层方法,如果您使用其中一个,或使用REST API进行HTTP调用中间层的语言。

如果您在MarkLogic的应用服务器(通常是两层架构)中工作,您还可以使用Search API(如wst所述)。从MarkLogic 8开始,您可以使用XQuery或服务器端JavaScript。