marklogic - 搜索语法以获取 Marklogic 中没有该字段的文档
问题描述
我的数据库中有一个字段,它有一个类型的字段范围索引,xs:string
我有word searches
,trailing wildcard searches
并field 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
我想做的事情甚至可能吗?
解决方案
在 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
希望有帮助,
推荐阅读
- appium - 无法单击 Appium 中未显示的单元格中的元素 - IOS 使用 Java-Client
- pointers - Return 从没有强制转换的指针生成整数 [-Wint-conversion]
- php - PHP:根据其他数组中定义的范围和开始值和结束值将数组切割成碎片
- java - 树视图查看所有目录,例如“C:/”
- wpf - XAML 的 UI 调试工具
- go - 相当于gpg --sign in golang?
- spring-boot - Spring Boot 2.0 应用程序正在运行但无法在 Windows 机器上的端口 8080 上访问它
- c++ - c++ - 如何在c ++中检查连续片段中的数字是否可以被11整除
- java - 一个线程所做的更改不会反映在另一个线程中
- android - Glide 不接受 GifDrawable 作为目标参数