У меня есть вопрос относительно поведения поиска с подстановочными знаками в MarkLogic.
По сути, я пытаюсь реплицировать SQL как запрос% что-то%.
Вот код, который возвращает ложные срабатывания:
xquery version "1.0-ml";
cts:search(/,
cts:element-query(fn:QName("","Document"),
cts:element-word-query(fn:QName("","Information"),"*date*", ("wildcarded"),0), ()),
'unfiltered')
Несколько заметок:
Что я не понимаю, так это то, почему «* что-то» и «что-то *» возвращают правильные значения, а «* что-то *» возвращает ложные срабатывания? Как я могу это исправить?
Пример ввода:
<Document><Information>another updated document</Information></Document>
<Document><Information>INCUMBENCY CERTIFICATE</Information></Document>
<Document><Information>Certificate of Incumbency</Information></Document>
<Document><Information>something 344_dated 243</Information></Document>
<Document><Information>another terminated document</Information></Document>
Выход:
Все документы совпадают, хотя должны быть возвращены только 1 и 4.
Окончательное редактирование. Единственное, что я хотел бы добавить, - это то, что казалось, что в двух базах данных - в одной с большей нагрузкой документов одни и те же настройки не дают одинаковых результатов. В базе данных с большим количеством документов последние настройки, которые я использовал и которые дают правильные результаты:
- поиск слова
- слова позиции
- тройной индекс
- быстрый поиск слова по элементу
- позиция слова элемента
- быстрый поиск по элементам
- трехсимвольный поиск
- трехсимвольные слова
- быстрый поиск символа элемента
- конечный поиск по шаблону
- концевые подстановочные знаки в словах
- быстрый поиск по подстановочному символу в конце элемента
- слово лексикон: сопоставление кодов