首页 > 解决方案 > 搜索语法以获取 Marklogic 中没有该字段的文档

问题描述

我的数据库中有一个字段,它有一个类型的字段范围索引,xs:string我有word searches,trailing wildcard searchesfield value searches打开。

以下是我的示例选项

  <options xmlns="http://marklogic.com/appservices/search">
 <constraint name="pmid">
          <range type="xs:string" facet="false">
            <field name="wos_pmid"/>
        </range>
    </constraint>
    <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>
    <transform-results apply="empty-snippet"/>
</options>

当我这样做时,我没有(pmid:*)得到任何结果,但它应该向我显示其中包含的所有记录node,并且当我这样做时-(pmid:*),它显示所有文档而不是仅显示其中没有的文档node

fields我想做的事情甚至可能吗?

标签: marklogicmarklogic-9

解决方案


在 Search API 中,通配符搜索使用单词或值查询,而不是范围查询:

http://docs.marklogic.com/guide/search-dev/wildcard#id_74842

服务器确实支持对范围索引中的值进行模式匹配,但这并未在 Search API 的查询文本语法中公开:

http://docs.marklogic.com/cts.valueMatch

也就是说,如果我理解正确,目标是测试节点是否存在。如果是这样,那是与通配符查询不同的查询,它匹配部分文本值。

一种方法是使用 cts:json-property-scope-query()(或 cts:element-query(),如果搜索 XML)和 cts:true-query() 或 cts:false-query() 作为子查询,如:

cts:json-property-scope-query("pmidPropertyKey", cts:true-query())

您可以设置一个自定义约束,该约束采用 pmid:true 或 pmid:false 查询文本并执行适当的 cts:json-property-scope-query()

有关更多信息,请参阅:

http://docs.marklogic.com/cts:json-property-scope-query

希望有帮助,


推荐阅读