繁体   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