返回

洞悉Electron项目全文搜索的坑洼,避险畅行无忧

前端

在最近为Electron项目打造全文搜索功能的过程中,我掉入了不少“陷阱”,其中大部分都和“正则表达式”有着千丝万缕的联系。考虑到自己对正则表达式的掌握一直停留在“初级阶段”,我决定将这些“坑洼”一一记录下来,并希望它们能为有类似需求的朋友提供一些“避险良方”。

伴随着测试阶段的展开,问题接踵而至:当搜索包含“%”和“”时,搜索结果中出现了大量与之毫不相关的条目。究其原因,我们可以归咎于一个鲜为人知的冷门知识:“%”和“”都是SQL语言的通配符,意味着当它们被纳入上述SQL语句,它们会被视为匹配所有字符的“自由变量”,而非具体的文本匹配目标。因此,这些特殊字符不会被正确识别,搜索结果也会变得不着边际。

要填平这个坑,我们需要先将“%”和“”的本真面目展示给正则表达式引擎,即让它们变得可见,然后再将它们当作正则表达式的组成部分。具体做法是采用转义字符“\”,比如“%”和“_”。利用这一招,我们成功地让搜索引擎清晰地认识到:“%”和“”在这一次扮演着“角色”,而不是“脚本”,它俩仅仅表示“百分之多少”和“下划线”,再也无法搞乱我们的搜索之旅了。

接下来,新的难题出现了:用户反馈说,搜索功能竟然会忽视“大小写”的差异。比如,当他们用“APPLE”这个大写的搜索词时,搜索结果却无视了大小写的区别,也把“apple”这个小写的字符串纳入了囊中。这显然不是我们想要的结果。

为了解决这个问题,我们需要动用正则表达式的“大小写敏感”选项,让它明确地区分“大小写”的差异。在不同的编程语言中,启用该选项的方法也不尽相同。例如,在JavaScript中,我们可以使用“/pattern/g”这个正则表达式,其中“g”标志就代表着“大小写敏感”。通过添加这个选项,我们让搜索引擎理解了“大小写”的重要性,它不再将大小写视为可以随意变换的东西,而是严格区分对待。

不过,故事到这里还没有结束。在后续的测试中,我们发现了一个更加刁钻的问题:当搜索词中包含“+”、“-”、“?”等运算符时,搜索结果也会遭受波及。那是因为这些运算符在正则表达式中也被赋予了特殊的含义。

因此,我们需要用另一种方式处理这些字符,那就是用“转义字符\”将它们“武装”起来,让正则表达式引擎知道:“喂,别自作聪明了,这次它们就是普通的字符,可别胡乱匹配!”

就这样,我们成功地避免了这些运算符搞乱我们的搜索结果。

通过对这些“陷阱”的逐个击破,我们构建了一个更加稳健可靠的全文搜索功能,它不仅能够理解“大小写”的差异,也能正确处理运算符的存在。与此同时,它也让我们明白,在学习正则表达式的道路上,我们还有很长的路要走。但我们相信,通过不断地摸索和学习,我们一定能掌握这门复杂而强大的工具,并为广大用户提供更加优质的搜索体验。