#marklogic
#marklogic
Вопрос:
Нам нужно выполнить поиск по шаблону с обоими символами «*» и «?», как описано в
https://docs.marklogic.com/10.0/guide/search-dev/wildcard
Символы подстановки Сервер Marklogic поддерживает два символа подстановки: * и ?.
- соответствует нулю или более символов, не содержащих пробелов. ? соответствует ровно одному символу без пробела. Например, he * будет соответствовать любому слову, начинающемуся с he, например, he, her, help, hello, helicopter и так далее. С другой стороны, он? будут совпадать только слова из трех букв, начинающиеся с he, такие как hem, hen и так далее.
Но мы выполняем поиск, как показано ниже,
let $options := <options xmlns="http://marklogic.com/appservices/search">
<constraint name="DocumentTitle">
<word type="xs:string" facet="false">
<element ns="http://marklogic.com/nondeliverable" name="DocumentTitle"/>
<search:term-option>wildcarded</search:term-option>,
<search:term-option>case-insensitive</search:term-option>,
<search:term-option>diacritic-insensitive</search:term-option>,
<search:term-option>unstemmed</search:term-option>
</word>
</constraint>
<return-query>true</return-query>
<return-qtext>true</return-qtext>
<return-metrics>true</return-metrics>
</options>
return (search:search("(DocumentTitle:(medi*ation))",$options,1,10),search:search("(DocumentTitle:(medi?ation))",$options,1,10))
Оба поисковых запроса возвращают одинаковое количество. Но если мы выполним поиск
cts:search(fn:doc(),cts:element-word-query(xs:QName("nd:DocumentTitle"),"medi?ation",("wildcarded"))),cts:search(fn:doc(),cts:element-word-query(xs:QName("nd:DocumentTitle"),"medi*ation",("wildcarded")))
количество отличается и возвращает правильный результат.
Как мы можем добиться поиска по шаблону с обоими символами «*» и «?» в поиске: поиск с правильным результатом.
Ответ №1:
cts:search
по умолчанию выполняется с фильтрацией, а по умолчанию search:search
выполняется без фильтрации. Передайте в filtered
качестве опции в cts:search
, и посмотрите, возвращает ли это те же результаты, search:search
что и .
Кроме того, вы также можете предоставить опцию поиска, чтобы сделать поиск: поиск фильтрованным:
<search-option>filtered</search-option>
Кстати, фильтрация выполняется медленно, и в идеале вы должны выбрать параметры индекса, которые делают фильтрацию ненужной. Проверьте, включены ли настройки подстановочных знаков.
HTH!