У меня установлен язык базы данных en
, а для stemmed searches
- Basic
, word searches
отключен.
Для документа, подобного следующему, я выполнил запросы только для работы с первой / самой короткой основой, которая будет найдена (как описано здесь). Ствол для further
возвращает 3 стебля: дальше, дальше и дальше. Я проверил это с
cts:stem("further")
Так как базовый поиск по основам должен индексировать только самую короткую основу, я ожидал, что поиск с помощью farther
не найдет мой документ. Но это не так.
xquery version "1.0-ml";
let $doc :=
<doc>
<title>further</title>
</doc>
return xdmp:document-insert('test.xml', $doc);
cts:search(doc(), cts:word-query("farther")); // finds my document
cts:stem("further")
Я что-то недопонимаю? Почему поиск farther
находит документ с further
, даже если это не самая короткая / первая основа?
Также поиск по третьей основе находит мой документ, даже если с параметром «без стебля» (в данном случае включен word searches
).
cts:search(doc(), cts:word-query("further", ("unstemmed")));
Использование MarkLogic 9.0-7.2.
Универсальный указатель в MarkLogic состоит из нескольких частей. Один для поиска с ограничениями, а другой - для поиска без шаблонов / поиска с подстановочными знаками. Основа индекса содержит основы, а часть без стебля содержит маркеры без стебля. Вот почему поиск без стебля по фактическому значению находит совпадение.
О поиске по основам: как вы можете прочитать в документации cts:stem
, эта функция возвращает все основы независимо от настройки базы данных. Однако порядок, в котором он их возвращает, важен. cts:stem("further")
возвращает far, further, farther
, cts:stem("farther")
возвращает far, farther, further
, а cts:stem("far")
возвращает far
.
Насколько я понял, базовый стемминг берет первый элемент, возвращаемый cts: stem, и использует его для индексации. Как вы можете прочитать выше, это означает, что он использует far
для further
, farther
, а также для far
. Расширенное определение границ позволит вам найти further
при выполнении поиска по ограничению поиска farther
, и наоборот.
Более подробная информация доступна в Руководстве по поиску в разделе: 'Создание в MarkLogic'
HTH!
Это помогло. Спасибо за объяснение.