字段索引仅在合并后更新
Field index only updated after merge
我创建了一个简单的字段索引,如下所示:
- 字段名称:root_test
- 包括根:false
- 单词词典:http://marklogic.com/collation/de/S1
- 索引设置:仅启用单词搜索
- 包含的元素:一个元素
content
我正在创建一个包含元素 content
和两个子元素 header
和 body
的文档。第二个请求使用字段索引查找所有值并测试它是否包含单词 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
true
但我实际得到的是:
true
false
仅当我在更新(第二次插入)后执行手动 merge 时,单词 Body
才会从字段索引中删除。
我是不是做错了什么?使用 9.0-8
单词词典不会跟踪特定的文档实例——这样做的成本会高得令人望而却步——因此在合并之前它无法清除有关已删除单词的信息。用于查询建议和协助某些通配符查询的单词词典;您不应该指望它们提供有关语料库中特定单词存在与否的准确信息。
如果想知道一个特定的词是否在语料库中,做一个词查询的估计,例如xdmp:estimate(cts:search(doc(),cts:word-query("Body",("unstemmed","case-insensitive","diacritic-insensitive"))))
。但是,这不会提供与排序规则完全相同的等式约束,因为搜索是基于代码点的,不会折叠兼容性字符等。
我创建了一个简单的字段索引,如下所示:
- 字段名称:root_test
- 包括根:false
- 单词词典:http://marklogic.com/collation/de/S1
- 索引设置:仅启用单词搜索
- 包含的元素:一个元素
content
我正在创建一个包含元素 content
和两个子元素 header
和 body
的文档。第二个请求使用字段索引查找所有值并测试它是否包含单词 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
true
但我实际得到的是:
true
false
仅当我在更新(第二次插入)后执行手动 merge 时,单词 Body
才会从字段索引中删除。
我是不是做错了什么?使用 9.0-8
单词词典不会跟踪特定的文档实例——这样做的成本会高得令人望而却步——因此在合并之前它无法清除有关已删除单词的信息。用于查询建议和协助某些通配符查询的单词词典;您不应该指望它们提供有关语料库中特定单词存在与否的准确信息。
如果想知道一个特定的词是否在语料库中,做一个词查询的估计,例如xdmp:estimate(cts:search(doc(),cts:word-query("Body",("unstemmed","case-insensitive","diacritic-insensitive"))))
。但是,这不会提供与排序规则完全相同的等式约束,因为搜索是基于代码点的,不会折叠兼容性字符等。