3

我需要使用某种模糊搜索(例如来自 oracle 的模糊搜索)并使用索引来搜索数据库表,因为我不想要表扫描(有很多数据)。

我想忽略大小写,语言特殊的东西(ñ,ß,...)和特殊字符,如_,(),-等......

搜索“maria (cool)”应该得到“maria-COOL”和“María_Cool”作为匹配项。
在甲骨文中以某种方式可能吗?

关于这种情况,我认为可以解决直接以小写创建索引并始终搜索小写的问题。但我不知道如何解决特殊字符的东西。
我考虑过将没有特殊字符的数据存储在单独的列中,然后搜索返回真实的数据,但我不能 100% 确定完美的解决方案在哪里。

有任何想法吗?

4

1 回答 1

3

也许UTL_MATCH可以提供帮助。

但是你也可以创建一个基于函数的索引,比如说,像这样:

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演示它不完整,但可以作为一个开始

于 2013-05-02T11:18:07.900 回答