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-8

word lexicon无法跟踪特定的文档实例——这样做的成本将高得令人望而却步——因此,在合并之前,它无法清除有关已删除单词的信息。用于查询建议和辅助某些通配符查询的单词词典;你不应该指望他们提供关于语料库中是否有特定单词的精确信息


如果想知道特定单词是否在语料库中,对单词查询进行估计,例如
xdmp:estimate(cts:search(doc(),cts:wordquery(“Body”),(“unstemmed”,“不区分大小写”,“不区分重音”))
。但是,这不会给出与排序规则完全相同的等式约束,因为搜索是基于代码点的,不会折叠兼容字符等。

单词词典不会跟踪特定的文档实例——这样做的成本会高得令人望而却步——因此在合并之前,它无法清除有关已删除单词的信息。用于查询建议和辅助某些通配符查询的单词词典;你不应该指望他们提供关于语料库中是否有特定单词的精确信息

如果想知道特定单词是否在语料库中,对单词查询进行估计,例如
xdmp:estimate(cts:search(doc(),cts:wordquery(“Body”),(“unstemmed”,“不区分大小写”,“不区分重音”))
。但是,这不会给出与排序规则完全相同的等式约束,因为搜索是基于代码点的,不会折叠兼容字符等

true
false