我们已经使用 search:search 通过 xquery 实现了 API。
搜索“技能/矩阵”时,它返回数据。
当我们搜索 Skill?matrix OR *ill/matrix 时,它会返回零条记录,或者有时会因超时而抛出异常。
其他通配符搜索工作正常,例如 转换?r*1 或反转?r* 或整流?r* 或转换器* 或转换?r*
数据库和“Word Query”级别的通配符选项设置为 true
- 尾随通配符搜索
- 尾随通配符单词位置
不确定如何调试和解决这个问题?
最佳答案
通配符搜索不是 grep。通配符将替换同一单词中的字符。因此,Skill?matrix
正在寻找将单个单词与 Skill
和 matrix
之间的字母相匹配,但 中没有这样的单词技能/矩阵
,因为这是一个包含两个单词且中间有标点符号的短语。您可以改为对短语“技能矩阵”进行标点符号和空格不敏感的搜索,它会匹配并且效率更高。
*ill/matrix
应该匹配,但根据您的索引和查询设置,它可能会尝试将 *ill
与单词词典或如果您没有单词词典,它可能会尝试对整个数据库进行过滤扫描。查看您的查询计划是什么 (xdmp:plan
)。如果您有三个字符索引并向查询传递显式 lexicon-expand=off
选项,它将运行得更快。仅启用尾随通配符但尝试执行前导通配符效果不会很好。
或者,如果您想像 grep 一样对待通配符,并且这不是对运行文本中的短语的一般搜索,而更像是短元素中的代码字查找,那么您最好在该元素上放置字符串范围索引并使用您的模式来匹配该范围索引。
关于search - MarkLogic - 通配符搜索不返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56915089/