Marklogic 使用未筛选选项搜索其值以包含特殊字符的字符串开头的文档?
我正在寻找文档的估计值,这些文档的“key”属性值以包含特殊字符的字符串开头“/” 但是word-query()在内部将“IBD/info/”标记为(cts:word(“IBD”)、cts:标点(“/”、cts:word(“info”)、…) 我创建了一个字段,详细信息如下Marklogic 使用未筛选选项搜索其值以包含特殊字符的字符串开头的文档?,marklogic,marklogic-10,Marklogic,Marklogic 10,我正在寻找文档的估计值,这些文档的“key”属性值以包含特殊字符的字符串开头“/” 但是word-query()在内部将“IBD/info/”标记为(cts:word(“IBD”)、cts:标点(“/”、cts:word(“info”)、…) 我创建了一个字段,详细信息如下 "field": [ { "field-name": "key", "field-path
"field": [
{
"field-name": "key",
"field-path": [
{
"path": "/envelope/instance/Key",
"weight": 1
}
],
"stemmed-searches": "advanced",
"field-value-searches": true,
"field-value-positions": true,
"trailing-wildcard-searches": true,
"trailing-wildcard-word-positions": true,
"tokenizer-override": [
{
"character": "/",
"tokenizer-class": "word"
}
]
}
]
并尝试下面的查询,但我仍然得到假阳性结果
cts:search(
fn:doc(),
cts:and-query((
cts:field-value-query("key","IBD/info/*"),
cts:collection-query("documentCollection")
)),
"unfiltered"
)
如何处理这种情况?创建一个包含以下详细信息的字段
"field": [
{
"field-name": "key",
"field-path": [
{
"path": "/envelope/instance/Key",
"weight": 1
}
],
"field-value-searches": true,
"trailing-wildcard-searches": true,
"three-character-searches": false,
"tokenizer-override": [
{
"character": "/",
"tokenizer-class": "word"
},
{
"character": "_",
"tokenizer-class": "word"
}
]
}
],
"range-field-index": [
{
"scalar-type": "string",
"field-name": "key",
"collation": "http://marklogic.com/collation/",
"range-value-positions": false,
"invalid-values": "reject"
}
]
重新编制索引完成后,按如下方式查询
let query =
cts.andQuery([
cts.fieldValueQuery("key", "IBD/info/*"),
cts.collectionQuery("documentCollection")
], [])
cts.search(query,"unfiltered")
然后,查询将仅获取“Key”值以“IBD/info/”开头的文档。带有
“尾随通配符搜索”:true
和“尾随通配符单词位置”:true
mycts。fieldValueQuery
正在工作。你能举一个假阳性文档的例子吗?谢谢@MadsHansen,是的,有“尾随通配符搜索”:true和cts.fieldValueQuery工作正常。我将更新下面的详细答案。我得到的假阳性结果是使用“Key”获取文档:“IBD/External/GWAS_IBD/info/studyinfo.yaml”,这不是预期的结果
let query =
cts.andQuery([
cts.fieldValueQuery("key", "IBD/info/*"),
cts.collectionQuery("documentCollection")
], [])
cts.search(query,"unfiltered")