我是MarkLogic的新手,我们正在针对我们的产品用例评估MarkLogic。
我们评估了很少的NoSQL数据库,如MongoDB,Couchbase等。
我正在寻找以下类型的查询搜索。
(Condition1 OR Condition2)AND(Condition3 OR Condition4)AND(Condition5)
MarkLogic可以提供此类搜索查询吗?
我刚开始学习MarkLogic并尝试了解架构。
谢谢, 萨米尔
答案 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建议使用Java或Node.js Client APIs进行三层方法,如果您使用其中一个,或使用REST API进行HTTP调用中间层的语言。
如果您在MarkLogic的应用服务器(通常是两层架构)中工作,您还可以使用Search API(如wst所述)。从MarkLogic 8开始,您可以使用XQuery或服务器端JavaScript。