我需要使用某种模糊搜索(例如来自 Oracle 的模糊搜索)并使用索引来搜索数据库表,因为我不需要表扫描(有大量数据)。
我想忽略大小写、语言特殊内容(ñ、ß、...)和特殊字符,如 _、()、- 等...
搜索“maria (cool)”应该得到“maria- COOL”和“María_Cool”作为匹配项。
在 Oracle 中这可能以某种方式实现吗?
关于这种情况,我认为可以解决直接以小写创建索引并始终以小写搜索的问题。但我不知道如何解决特殊字符的问题。
我考虑过将没有特殊字符的数据存储在单独的列中,然后搜索返回真实的数据,但我不能 100% 确定这是完美的解决方案。
有任何想法吗?
Maybe UTL_匹配 http://docs.oracle.com/cd/E11882_01/appdev.112/e25788/u_match.htm可以帮助。
但是您也可以创建基于函数的索引,例如:
regexp_replace(your_column, '[^0-9a-zA-Z]+', ' ')
并尝试像这样匹配:
...
WHERE regexp_replace(your_column, '[^0-9a-zA-Z]+', ' ') =
regexp_replace('maria (cool)' , '[^0-9a-zA-Z]+', ' ')
这是一个 sqlfiddle 演示 http://www.sqlfiddle.com/#!4/1ac2c/3它并不完整,但可以作为一个开始
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)