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

标签 search wildcard marklogic

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

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

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

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

数据库和“Word Query”级别的通配符选项设置为 true

  • 尾随通配符搜索
  • 尾随通配符单词位置

不确定如何调试和解决这个问题?

最佳答案

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

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

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

关于search - MarkLogic - 通配符搜索不返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56915089/

相关文章:

sorting - Elasticsearch 通配符查询以获取排序结果

xquery - MarkLogic - 清空大型数据库的最快方法

javascript - 为什么我无法捕获 MarkLogic 请求中的某些异常?

c# - 应用程序的内存搜索索引占用太多内存 - 有什么建议吗?

ssl - 我可以在两个域上实现通配符 SSL 证书吗?

java - 具有下限的嵌套通配符

xml - MarkLogic TDE XPATH 不适用于重复组

php - mysql FULLTEXT 搜索多个单词

javascript - 如何获取指定字符的位置?

mysql - Codeigniter + MySQL - 搜索包含字符串