首页 > 解决方案 > Marklogic 中的可搜索表达式

问题描述

如何在 MarkLogic 的可搜索表达式中指定多个 XPath?

我尝试了以下方法:

let $options :=
<options xmlns="http://marklogic.com/appservices/search">
    <additional-query>
        <cts:collection-query xmlns:cts="http://marklogic.com/cts">
            <cts:uri>OncoWatch</cts:uri>
        </cts:collection-query>
    </additional-query>
     <searchable-expression xmlns:es="http://marklogic.com/entity-services"
                           xmlns:wos_dps="http://clarivate.com/schema/wok5.27/public/FullRecord">
        /es:envelope/es:raw/wos_dps:REC/wos_dps:static_data/wos_dps:summary/wos_dps:titles|
        /es:envelope/es:raw/wos_dps:REC/wos_dps:static_data/wos_dps:fullrecord_metadata/wos_dps:abstracts
    </searchable-expression>
    <term>
        <term-option>case-insensitive</term-option>
        <term-option>punctuation-insensitive</term-option>
        <term-option>whitespace-insensitive</term-option>
        <term-option>wildcarded</term-option>
    </term>
    <search-option>unfiltered</search-option>
    <transform-results apply="empty-snippet"/>
</options>

我收到以下错误

[1.0-ml] XDMP-UNSEARCHABLE: cts:search(fn:collection()/es:envelope/es:raw/wos_dps:REC/wos_dps:static_data/wos_dps:summary/wos_dps:titles | fn:collection()/es :envelope/es:raw/wos_dps:REC/wos_dps:static_data/wos_dps:fullrecord_metadata/wos_dps:abstracts, cts:and-query((cts:word-query("*", ("case-insensitive","punctuation- insensitive","whitespace-insensitive","wildcarded","lang=en"), 1), cts:collection-query("OncoWatch")), ()))[1 to 10] -- 表达式不可搜索

但是当我尝试单独的 XPath 时,一切正常......

标签: marklogicmarklogic-9

解决方案


可搜索的表达式必须是单个表达式。正如以利亚建议的那样,您可以尝试将条件部分放在谓词中(使用|而不是“ or”作为运算符)。

您可以使用 来探测表达式的哪些部分不可搜索xdmp:query-trace。启用它,尝试将您的表达式用作 XPath 表达式,然后查看ErrorLog.txt以查看是否有任何段被报告为不可搜索。

像这样的东西:

xquery version "1.0-ml";
(
  xdmp:query-trace(fn:true()),
  fn:doc()/your/xpath/expr/here,
  xdmp:query-trace(fn:false())
)

这里有一个输出示例:

http://docs.marklogic.com/guide/performance/query_meters#id_84776


推荐阅读