MarkLogic-通配符搜索不会返回结果

时间:2019-07-06 14:41:25

标签: search wildcard marklogic

我们已经使用search:search通过xquery实现了API。

搜索“技能/矩阵”时,它会返回数据。

当我们搜索Skill?matrix或* ill / matrix时,它返回零条记录,有时会超过时间抛出异常。

其他通配符搜索工作正常,例如 转换r * 1或反相r *或整流r *或变换器*或转换r *

“数据库”和“单词查询”级别的通配符选项设置为true

  • 跟踪通配符搜索
  • 跟踪通配符词位置

所以不确定如何调试和解决此问题吗?

1 个答案:

答案 0 :(得分:2)

通配符搜索不是grep。通配符将替换同一单词内的字符。因此Skill?matrix希望将单个单词与Skillmatrix之间的字母匹配,但是Skill/matrix中没有这样的单词,因为这是一个包含两个单词的短语标点符号之间。相反,您可以对短语“技能矩阵”进行标点和空格不敏感的搜索,这样可以匹配并且效率更高。

*ill/matrix应该匹配,但是根据您的索引和查询设置,它可能试图与词库完全匹配*ill,或者如果您没有词库,则可能正在尝试对整个数据库进行过滤扫描。查看您的查询计划是(xdmp:plan)。如果您具有三个字符的索引并将显式的lexicon-expand=off选项传递给查询,它将更快地运行。仅启用尾随通配符,但尝试执行前导通配符并不能很好地工作。

或者,如果您希望将通配符像grep一样对待,并且这不是常规搜索运行文本中的短语,而是更像在短元素中查找代码字,则最好在该元素上放置字符串范围索引并使用模式来匹配该范围索引。