如何在不降低搜索性能的情况下正确清理 C# 中的搜索字符串

本文关键字:搜索 字符串 情况下 性能 | 更新日期: 2023-09-27 18:34:12

我需要清理用户的输入字符串,因为我稍后在 OLEDB 查询中使用该字符串来索引文档存储库以查找匹配的文件、说明等。问题是我不能在 CONTAINS 语句的查询中使用包含特殊字符的字符串。

有没有比我正在做的更好的方法来消毒而不会降低准确性?

我目前正在做的是获取搜索字符串,并使用正则表达式:[^0-9a-zA-Z's'/'._-]+对其进行验证,并将其替换为空字符串以删除搜索字符串中的任何类型的特殊字符。

我的问题是某些文件和描述包含特殊字符,如 & 和 $,如果我不允许任何类型的特殊字符,搜索准确性就会下降。有没有更有效的方法可以做到这一点?

如何在不降低搜索性能的情况下正确清理 C# 中的搜索字符串

使用正则表达式绝对是正确的方法。我认为此任务不需要任何其他特定于库的功能或任何第三方库,或者它们可以通过使用正则表达式来提高性能。无论如何,几点:-允许描述中可能存在的特殊字符(不要通过正则表达式将它们剔除(,排除其余字符。但我假设你在这里循环,"CONTAINS"不会采用特殊字符,但你需要一些特殊字符。如果是这种情况,那么您可以继续编写一个本地函数,该函数完全执行所包含的操作,减去对所需某些特定特殊字符的检查。使用本地函数代替 CONTAINS 进行查询。我想不出比这更明显的方法了。或者,彻底修改整个搜索逻辑,并使用将保持唯一且特殊字符空闲的键/字段进行搜索。无论如何,我不认为根据它们的描述在数据库中搜索文件是一个非常绝妙的主意。