[英]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
原始问题的简短答案是“是”。 “如何”的细节将取决于用于表达查询的方法。
如果您使用Java或Node.js客户端API中的一种,则参考体系结构建议使用三层方法;如果在中间层中使用其他语言,则建议使用HTTP调用REST API 。
如果您在MarkLogic的应用程序服务器(通常是两层体系结构)中工作,则还可以使用Search API(如wst所述)。 从MarkLogic 8开始,您可以使用XQuery或服务器端JavaScript进行操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.