如何解决带有空格的 Oracle 模糊搜索
我想在 Oracle 中进行模糊搜索,但查询无法使用空格。
例如。假设我们有一个表 po_test_tmp 有很多记录
如果我们执行这个查询,它工作正常
select score(1),ae.po_number
from po_test_tmp ae
where CONTAINS(po_number,'fuzzy(po,50,5000,weight)',1)> 0
order by score(1) desc;
但是如果我们尝试搜索像 PO 123 这样的词,它就行不通了
select score(1),'fuzzy(PO 123,1)> 0
order by score(1) desc;
ORA-29902: error in executing ODCIIndexStart() routine
ORA-20000: Oracle Text error:
DRG-50901: text query parser syntax error on line 1,column 10
29902. 00000 - "error in executing ODCIIndexStart() routine"
*Cause: The execution of ODCIIndexStart routine caused an error.
*Action: Examine the error messages produced by the indextype code and
take appropriate action.
如果搜索词有空格怎么做模糊搜索,搜索词可以有特殊字符和多个空格。
解决方法
首先请查看 Fuzzy 运算符的文档
参数 term
- 指定要对其执行模糊扩展的词。
请注意,词通常不包含空格,您必须将搜索拆分为搜索词。
另外注意要激活的 fuzzy
,该术语必须至少有 3 个字符。因此,您使用 PO
的示例将不起作用。
您可以为您的设置做的是为模糊字符串的每个部分定义一个额外的 fuzzy
搜索,并将它们与 near
operator 组合,如下所示
contains(po_number,'near (( fuzzy(word1,weight),fuzzy(word2,weight) ),2,TRUE)',1) > 0
near
在这里强制要求两个匹配项必须相邻 (span
= 2) 和有序 (TRUE
)。
特殊字符的处理取决于您在首选项中对 whitespace
和 printjoins
的定义。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。