- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是一个 MarkLogic 新手问题。想象一下像这样的 xml 结构,它是我真正的业务问题的浓缩:
<Person id="1">
<Name>Bob</Name>
<City>Oakland</City>
<Phone>2122931022</Phone>
<Phone>3123032902</Phone>
</Person>
请注意,一个文档可以并且将会有多个 Phone 元素。
我需要从每个文档中返回信息,该文档中的Phone元素与电话号码列表中的ANY相匹配。该列表中可能有几十个电话号码。
我已经尝试过这个:
let $a := cts:word-query("3738494044")
let $b := cts:word-query("2373839383")
let $c := cts:word-query("3933849383")
let $or := cts:or-query( ($a, $b, $c) )
return cts:search(/Person/Phone, $or)
它正确执行查询,但它返回 Results 元素内的一系列 Phone 元素。我的目标是为每个匹配文档返回所有 Name 和 City 元素以及 Person 元素中的 id 属性。示例:
<results>
<match id="18" phone="2123339494" name="bob" city="oakland"/>
<match id="22" phone="3940594844" name="mary" city="denver"/>
etc...
</results>
所以我认为我需要某种形式的cts:search
,它既允许这种 bool 功能,还允许我指定返回每个文档的哪些部分。那时我可以使用 XPATH 进一步处理结果。我需要有效地执行此操作,因此例如我认为返回文档 uri 列表然后循环查询每个文档的效率不高。谢谢!
最佳答案
你的方法并不像你想象的那么糟糕。只需进行一些更改即可使其按您的意愿工作。
首先,您最好使用 cts:element-value-query
而不是 cts:word-query
。它将允许您将搜索值限制为特定元素。当您为该元素添加元素范围索引时,它的性能最佳,但这不是必需的。它也可以依赖于始终存在的单词索引。
其次,不需要cts:or-query
。 cts:word-query
和 cts:element-value-query
函数(以及所有其他相关函数)都接受多个搜索字符串作为一个序列参数。它们会自动被视为或查询。
第三,电话号码是结果中的“主键”,因此返回所有匹配 Phone 元素的列表是正确的方法。您只需要意识到生成的 Phone 元素仍然知道它们来自哪里。您可以轻松地使用 XPath
导航到父级和同级。
第四,没有什么反对循环搜索结果的。这可能听起来有点奇怪,但它不会花费太多额外的性能。实际上,在 MarkLogic Server 中,它几乎可以忽略不计。当您尝试返回许多结果(超过数千个)时,大多数性能可能会损失,在这种情况下,大部分时间都浪费在序列化所有结果上。如果您可能需要处理大量搜索结果,那么立即开始使用分页是明智的。
要得到您所要求的内容,您可以使用以下代码:
<results>{
for $phone in
cts:search(
doc()/Person/Phone,
cts:element-value-query(
xs:QName("Phone"),
("3738494044", "2373839383", "3933849383")
)
)
return
<match id="{data($phone/../@id)}" phone="{data($phone)}" name="{data($phone/../Name)}" city="{data($phone/../City)}"/>
}</results>
祝你好运。
关于使用 OR 在 MarkLogic 上进行 Xquery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7534218/
今天我从 MarkLogic 查询控制台得到一个奇怪的输出。当我尝试获取 MarkLogic 数据库中已存在的文档的文档属性时,ML 查询控制台返回一个空的查询序列。 这返回了一个文档: fn:do
根据文档: 如果内容定期更新,理想情况下,每个林每个林应该有两个 CPU(或内核)。 例如,双处理器/双核机器应该能够托管两个 256GB 的林,而四处理器/双核系统应该能够托管四个 256GB 的林
在使用 ml-gradle 进行部署期间,我必须使用 marklogic API 在集群中创建多个引导主机。 我知道我可以通过管理控制台(8001 端口)配置它,但我不知道如何使用 MarkLogic
是否有任何参数可以控制森林的最大尺寸?或任何最佳实践,运行中的脚本? 最佳答案 森林大小没有硬性限制,但有一些一般准则。文档的大小和类型、索引、硬件规范和使用模式等因素都会影响性能。 来自 MarkL
将队列大小从默认的 100000 增加到 500000 会产生什么影响? 是否有经验法则来计算合理的最大数量使用可用资源(如 RAM、CPU 核心和其他需要考虑的资源)的队列大小。 如有任何建议,我们
我正在使用 获取给定搜索字符串的方面 search:search($q, $options) 其中$q是搜索文本和 $options 是 frequency-order
什么是 MarkLogic 中的注册查询,用例是什么? http://docs.marklogic.com/cts:registered-query 最佳答案 MarkLogic 在 Search D
CAP 定理对我来说似乎合乎逻辑。我的理解是: 如果我在分布式系统上有一致性,我必须等待所有交易。 ACID 的成本是复制所有数据的时间网络。 但 Marklogic 怎么能两者兼得呢。 ACID和分
如何在 MarkLogic 中找到文档的创建日期? 我希望找到类似 xdmp:document-creation-date() 的东西。 谢谢。 最佳答案 MarkLogic 将 maintain a
ML 8是否已支持按路径索引进行排序?我想要实现类似于以下内容: attritbutes//name 如果没有,有没有办法做到这一点?我有几个名称相同的元素,它们来自不同的父节
我有一个多 TB 的生产数据库(MarkLogic 9.0-8,RedHat),我需要向其添加 2 个新的元素范围索引。在我可以执行更改之前,我需要估计将受重新索引影响的文档数量,以确保我的维护窗口足
我在 Marklogic 数据库中有大约 20 个 lacs 文档。我希望我的搜索应用程序中的文档总数用于分页。为了获得我正在使用的总数 xdmp:estimate(cts:search(doc(),
var marklogic=require('marklogic'); var ins=marklogic.createDatabaseClient({'host':'localhost','port
我在 MarkLogic 7 中有一个 3 节点集群。我创建了一个数据库“sample-db”,其中包含以下林: sample-db-01 托管在 node-1 上 sample-db-02 托管在
您能否提供启用集合词典的查询。 我已经使用了这个编码,但我遇到了同样的问题。 xquery 版本“1.0-ml”; import module namespace admin = "http://
我有一个主集群和一个外部集群耦合在一起。此外,我还为几个数据库启用了数据库复制,并将按名称设置为 false 的林连接。我想将这两个集群分离,并在几天后以最少的停机时间重新耦合它们。我们的主要事件是从
有没有办法使用关系运算符来使用 MarkLogic 自定义约束进行搜索? 对于正常范围查询,我可以搜索完全匹配(“thing:123”)或使用关系运算符(“thing LT 123”)。但是,当我编写
我尝试了以下 xquery 示例,但它似乎只返回一个配置脚本,而不是在服务器上实际创建 NewDB。实际创建数据库和林的步骤是什么? xquery version "1.0-ml"; import
在将文件存储库加载到 MarkLogic 中时,我意识到它包含大量重复文档。例如,相同产品目录文档(“catalog.pdf”)的多个副本可能存在于几个不同的目录中,例如:/products/publ
除了之外,还有什么方法可以搜索PPT、PDF等二进制文件的内容吗? 使用 xdmp:document-filter() 函数将其转换为 X HTML 格式并在其上搜索? 最佳答案 基本上没有。您必须从
我是一名优秀的程序员,十分优秀!