Marklogic 字段索引仅在合并后更新
我创建了一个简单的字段索引,如下所示:Marklogic 字段索引仅在合并后更新,marklogic,marklogic-9,Marklogic,Marklogic 9,我创建了一个简单的字段索引,如下所示: 字段名称:root\u测试 包含根:false 词汇: 索引设置:仅启用单词搜索 包含的元素:元素内容 我正在创建一个文档,其中包含一个元素content和两个子元素header和body。第二个请求使用字段索引查找所有值,并测试它是否包含单词Body。正如所料,确实如此。然后,我在不使用body元素的情况下更新文档,并再次请求字段索引词。字段索引仍然包含单词正文。这是我的测试脚本: xquery version "1.0-ml"; xdmp:doc
- 字段名称:root\u测试
- 包含根:false
- 词汇:
- 索引设置:仅启用单词搜索
- 包含的元素:元素
内容
content
和两个子元素header
和body
。第二个请求使用字段索引查找所有值,并测试它是否包含单词Body
。正如所料,确实如此。然后,我在不使用body
元素的情况下更新文档,并再次请求字段索引词。字段索引仍然包含单词正文
。这是我的测试脚本:
xquery version "1.0-ml";
xdmp:document-insert("test.xml",
<test>
<title>not found</title>
<content>
<header>Found</header>
<body>Body</body>
</content>
</test>
);
fn:exists(fn:index-of(
cts:field-words("root_test", (), ("collation=http://marklogic.com/collation/de/S1")),
"Body"
)) = fn:true();
xdmp:document-insert("test.xml",
<test>
<title>not found</title>
<content>
<header>Found</header>
</content>
</test>
);
fn:empty(fn:index-of(
cts:field-words("root_test", (), ("collation=http://marklogic.com/collation/de/S1")),
"Body"
)) = fn:true()
但我真正得到的是:
true
false
只有在更新(第二次插入)后执行手动合并时,才会从字段索引中删除单词正文
我做错什么了吗?使用9.0-8word lexicon无法跟踪特定的文档实例——这样做的成本将高得令人望而却步——因此,在合并之前,它无法清除有关已删除单词的信息。用于查询建议和辅助某些通配符查询的单词词典;你不应该指望他们提供关于语料库中是否有特定单词的精确信息
如果想知道特定单词是否在语料库中,对单词查询进行估计,例如xdmp:estimate(cts:search(doc(),cts:wordquery(“Body”),(“unstemmed”,“不区分大小写”,“不区分重音”))
。但是,这不会给出与排序规则完全相同的等式约束,因为搜索是基于代码点的,不会折叠兼容字符等。单词词典不会跟踪特定的文档实例——这样做的成本会高得令人望而却步——因此在合并之前,它无法清除有关已删除单词的信息。用于查询建议和辅助某些通配符查询的单词词典;你不应该指望他们提供关于语料库中是否有特定单词的精确信息
如果想知道特定单词是否在语料库中,对单词查询进行估计,例如xdmp:estimate(cts:search(doc(),cts:wordquery(“Body”),(“unstemmed”,“不区分大小写”,“不区分重音”))
。但是,这不会给出与排序规则完全相同的等式约束,因为搜索是基于代码点的,不会折叠兼容字符等
true
false