全文搜索中的通配符搜索是一种技术,它允许用户用特殊符号替换搜索查询中的一个或多个字符,从而实现对具有未知或可变部分的术语的灵活匹配。最常见的通配符是星号(*),它通常代表零个或多个字符,以及问号(?),它通常匹配单个字符。例如,搜索 "comp*ter" 可以返回 "computer"、"compacter" 或 "completer",而“b?g”可能匹配 "bag"、"big" 或 "bug"。当术语的确切拼写或形式不确定,或者在大型数据集中定位词语变体时,这种方法非常有用。
从底层来看,通配符搜索依赖于模式匹配算法,这些算法扫描索引文本以查找与查询结构对齐的序列。例如,搜索引擎可能会使用倒排索引(一种将术语映射到文档中位置的数据结构)来高效地查找匹配项。然而,通配符可能会影响性能。像“run*”这样的尾部通配符可以通过扫描以“run”开头的术语来利用索引,但像“*ing”这样的前导通配符会迫使引擎检查所有以“ing”结尾的术语,这会比较慢。一些系统使用 n-grams(预定义的文本片段)或 edge n-grams(基于前缀的片段)等技术优化中间或前导通配符,但这需要额外的配置和存储。
通配符搜索适用于自动补全功能(例如,“progr*”建议“programming”)、处理拼写错误(“col?r”匹配“color”或“colour”)或查询不可预测的数据格式(产品代码如“ABC-123*”)等场景。然而,开发者应该谨慎使用它们。过度使用通配符,尤其是前导通配符,会降低查询速度。前缀查询(用于尾部模式)或模糊搜索(用于拼写错误)等替代方案可能更高效。此外,不同系统的语法也各不相同:Elasticsearch 使用 * 和 ?,而 SQL 使用 % 和 _。理解这些细微差别可以确保有效实施而不牺牲性能。