1

我继承了去年从 ML7 移植到 ML9 的代码,并且搜索页面的构面窗格没有像在旧系统中那样显示构面清除控件。构建控件的 XQuery 逻辑取决于search:parse()包含@qtextpre属性的结果。在旧系统中,解析后的查询是:

<cts:element-range-query qtextpre="Status:" qtextref="cts:annotation" operator="=" xmlns:cts="http://marklogic.com/cts" xmlns:xs="http://www.w3.org/2001/XMLSchema">
 <cts:element xmlns:_1="http://www.marklogic.com/ps/ns/qanda/">_1:Status</cts:element>
 <cts:annotation qtextref="following-sibling::cts:value"></cts:annotation>
 <cts:value xsi:type="xs:string" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Review</cts:value>
 <cts:option>collation=http://marklogic.com/collation/codepoint</cts:option>
</cts:element-range-query>

但在新系统中,具有相同选项的相同查询文本解析为:

<cts:element-range-query operator="=" xmlns:cts="http://marklogic.com/cts">
 <cts:element xmlns:_1="http://www.marklogic.com/ps/ns/qanda/">_1:Status</cts:element>
 <cts:value xsi:type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Review</cts:value>
 <cts:option>collation=http://marklogic.com/collation/codepoint</cts:option>
</cts:element-range-query>

我不清楚该属性的用途,但此应用程序代码依赖于@qtextpre在查询中查找该属性来决定是否在构面窗格中显示构面清除控件。谁能解释为什么它在 ML9 版本的解析查询中不存在?

4

1 回答 1

3

search:parse()有关该功能的用法,请参阅每个 Marklogic 版本的文档。

我不知道为什么 - 你问的实际问题,但我可以回答这个问题:最新的 2 个版本有什么不同。这听起来会更有帮助......

在文档的第 9 版中,可以选择以所谓的 cts:annotated-query格式和cts:query格式获取输出。似乎默认值不那么冗长。根据注释,这已被弃用,但在最新版本的 9 中可用。由于 MarkLogic 9 对搜索有很多更改,我不确定哪个版本的内容可能发生了变化。但是,我相信该cts:annotated-query选项会给出您想要的结果。

https://docs.marklogic.com/9.0/search:parse

cts:annotated-query:等效于 schema-element(cts:query) 产生的输出,但添加了注释。此表格已弃用,将在未来的版本中删除。

search:parse($qText, $options, "cts:annotated-query")

请注意,MarkLogic 10 的文档还列出了您需要的选项已弃用。因此,当您从 9 到 10 个选项被删除时,请留意是否需要更改您的功能的代码。

于 2020-05-11T22:32:32.950 回答