Индекс поля обновляется только после слияния - PullRequest
0 голосов
/ 19 февраля 2019

Я создал простой индекс поля, который выглядит следующим образом:

  • имя поля: 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

Только если я выполнюпри ручном слиянии после обновления (вторая вставка) слово Body удаляется из индекса поля.

Я что-то здесь не так делаю?Используя 9.0-8

1 Ответ

0 голосов
/ 19 февраля 2019

Слово лексикон не отслеживает конкретные экземпляры документа - делать это будет непомерно дорого - и поэтому не может очищать информацию об удаленных словах до момента слияния.Слово лексиконы для предложения запроса и для поддержки определенных подстановочных запросов;Вы не должны рассчитывать на них, чтобы предоставить точную информацию о наличии или отсутствии определенных слов в корпусе.

Если хотите знать, находится ли конкретное слово в корпусе, сделайте оценку запроса слова,например, xdmp:estimate(cts:search(doc(),cts:word-query("Body",("unstemmed","case-insensitive","diacritic-insensitive")))).Однако это не даст тех же ограничений равенства, что и ваша сортировка, поскольку поиск основан на кодовой точке и не сворачивает символы совместимости и т. П.

...