cts поиск с учетом пробелов - PullRequest
0 голосов
/ 12 февраля 2019

Я просто хотел создать запрос нефильтрованный whitespace-sensitive cts и почему-то не может заставить его работать (без других ограничений).

Это моя среда тестирования:

xquery version "1.0-ml";

xdmp:document-insert("test1.xml", <test><title>test word</title></test>);
xdmp:document-insert("test2.xml", <test><title>test-word</title></test>);


cts:search(//test, cts:element-value-query(xs:QName("title"), "test word", ("whitespace-sensitive")), ("unfiltered"))

У меня есть два документа, которые отличаются только одним символом -.Выполнение этого поиска cts возвращает оба документа.Глядя на план выполнения, все становится странным.Окончательный план показывает это:

<qry:term-query weight="1">
 <qry:key>5029803220044614354</qry:key>
 <qry:annotation>element(title,value("test","word"))</qry:annotation>
</qry:term-query>

Кажется, что MarkLogic ищет два слова test и word без пробелов.Кажется, он не использует опцию whitespace-sensitive.Только если я добавлю еще три параметра «с учетом регистра», «с учетом диакритики» и «с учетом пунктуации», будет выполняться поиск с учетом пробелов.Удаление любого из параметров приводит к нечувствительному к пробелам поиску:

xdmp:plan(cts:search(//test, cts:element-value-query(xs:QName("title"), "test word", ("case-sensitive", "diacritic-sensitive", "punctuation-sensitive", "whitespace-sensitive")), ("unfiltered")))
=> ...
<qry:term-query weight="1">
 <qry:key>11298961959398038325</qry:key>
 <qry:annotation>element(title,value("test"," ","word"))</qry:annotation>
</qry:term-query>

Не понимаю ли я параметр «чувствительный к пробелам»?

Использование MarkLogic 9.8-0.

1 Ответ

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

Я думаю, что, возможно, вы ожидаете, что все варианты будут разрешены без фильтрации.Это не относится к делу.Некоторые параметры и комбинации параметров и параметров индекса не могут быть разрешены без фильтрации.В общем, единственное обстоятельство, при котором запросы, чувствительные к пробелам, могут быть разрешены из индекса, это если запрос является запросом «точного» значения.В целом, пробелы (и знаки пунктуации) не индексируются.Это то, что план показывает вам.Поскольку информация недоступна в индексе, нефильтрованный запрос не сможет исключить результаты на этой основе.Фильтр, который также содержит фактические данные, может исключать результаты на основе пробела и возвращать правильные результаты.

...