【发布时间】:2021-01-27 12:55:31
【问题描述】:
我们需要同时使用字符“*”和“?”来实现通配符搜索。如
中所述https://docs.marklogic.com/10.0/guide/search-dev/wildcard
通配符 Marklogic Server 支持两个通配符:* 和 ?。
- 匹配零个或多个非空格字符。 ?恰好匹配一个非空格字符。 例如,he* 将匹配以 he 开头的任何单词,例如 he、her、help、hello、heilton 等。另一方面,他?只会匹配以 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")))
计数不同并返回正确的结果。
我们如何实现同时使用字符“*”和“?”的通配符搜索在搜索中:搜索正确的结果。
【问题讨论】:
标签: marklogic