如何从搜索字符串中返回包含撇号的查询结果字符串不包含撇号

问题描述:

我有一个简单的应用程序,允许用户输入一个字符串来搜索数据库中的名称。服务器端是ColdFusion 7.我遇到的问题是诸如“obrien”之类的查询不会返回名称为“o'brien”的条目。如何从搜索字符串中返回包含撇号的查询结果字符串不包含撇号

我想我想要的是模糊匹配能力。在做了一些研究之后,我也遇到了全文搜索,这可能是我正在寻找的;但是,我不确定两者的区别。 ColdFusion有一个名为verity的服务,但似乎我必须先查询所有数据库,然后对其进行索引 - 这听起来非常昂贵。

在没有首先查询整个数据库的情况下,是否有内置的方法可以在ColdFusion中进行模糊匹配或全文搜索?如果不是,在进行全文搜索时,是否必须指定索引?例如,obrien应该索引为“obrien,o'brien,o'brein”?

+0

你使用了哪些数据库后端?# – diagonalbatman 2013-04-09 14:56:58

+0

@diagonalbatman db2在大型机上 – 2013-04-09 15:08:16

+3

在“db2模糊搜索”的谷歌搜索引导我转到有关该主题的IBM文档。 – 2013-04-09 15:11:15

试图使用SOUNDEX的功能如何?我不认为这里有任何简单的答案。

+0

Soundex将工作,如果他所需要处理的是撇号,但是,它会让一吨的噪音。 – 2013-04-10 11:56:05

+0

我结束了使用soundex。我通常有足够的用户名称来显着缩小结果。 – 2013-04-11 16:52:19

检查下面的查询,

select * 
from tablename 
where Replace(ColumnName,'''','') like 'obrien' 

OR

select * 
from tablename 
where Replace(ColumnName,'''','') like '%obrien%' 
+0

你的第一个例子应该是'='。 – rip747 2013-04-10 12:28:45

您在这里会走上错误的轨道 - 它不是你需要一个模糊匹配,它的参数化查询。

您可以将参数的值设置为“O'Brien”,参数将理解嵌入式撇号的功能。

+0

...至少我怀疑这是怎么回事... – 2013-04-09 15:22:49

+1

值“o'brien”是在数据库中,但用户搜索“obrien”。 0结果是因为“O'brien”“obrien” – Travis 2013-04-09 15:25:29

+4

你可能是对的,但这看起来像是一个试图避免名字中的撇号头痛的人。如果这个人被称为奥布莱恩,那么这不是我们应该搜索的名字吗?我可能是错的... – 2013-04-09 15:37:45

您在查找具有模糊匹配功能的fulltextsearch,更重要的是您正在寻找这些系统提供的内置令牌处理器。但是,您也可以使用将执行Levenshtein编辑距离匹配的SQL函数。

Verity或任何其他信息检索系统(如Lucene)将是一个解决方案,但如果需要实时搜索,则必须不断重新索引来自原始数据的数据。如果你不需要经常重新使用Verity,这可能是一个不错的选择(尽管如此,请保佑你的心脏)。令牌处理器处理来自数据库和用户的数据格式,以便最终得到相同的字符串。另外Verity在ColdFusion 7中很老,所以我认为它的模糊匹配选项相对于在Lucene 4中可以找到的选项非常有限。

另一种选择是在levenshtein编辑距离算法中使用sql中的函数。这基本上会告诉你从一个字符串到另一个字符串需要多少编辑。这是“模糊”匹配。例如,要将lcase(O'brien)变成lcase(obrien),需要进行一次编辑,删除“'”。一个六字符串的编辑是一个很好的匹配。要将“hugh”变成“jones”,需要进行五次编辑(改变每个字母,添加一个字母)。对长度为4的字符串进行五次编辑并不是很好的匹配。 Levenshtein distance in T-SQL

最后,对于任何带有全文搜索的数据库,这会给你带来一些象真实一样的标记的实时数据。这很好,因为它是如此,安装起来非常简单。我不确定DB2是否支持模糊匹配。 SQL Server没有。

+0

真的很好的解释。我现在明白他为什么不在寻找撇号; P。出于兴趣 - 从“如何将包含撇号的查询结果从不包含撇号的搜索字符串返回”改为“如何实现DB2中的模糊匹配?”,需要进行多少次编辑? – 2013-04-10 12:04:57

+0

只需一次编辑!出于某种原因,我认为休琼斯是OP。哈。 – 2013-04-10 12:06:31

+0

哈哈 - 从'休琼斯'到'帕里亚'有多少编辑? – 2013-04-10 12:07:20