全文搜索通过将基于关键词的搜索能力与结构化数据约束相结合来支持过滤。当您执行全文搜索时,系统首先识别与文本查询匹配的文档或记录(例如,查找所有包含“数据库”一词的文章)。然后应用附加条件进行过滤——例如日期范围、类别或数值——以缩小这些结果的范围。例如,对“数据库”的搜索可以进行过滤,仅显示在去年发布或标记为“教程”的文档。这种结合允许用户在不牺牲基于关键词搜索灵活性的情况下优化结果,确保相关性同时满足特定要求。
过滤与全文搜索的集成取决于底层数据库或搜索引擎处理查询的方式。像 Elasticsearch 或 PostgreSQL 这样的系统使用倒排索引以实现快速文本匹配,高效地定位包含特定术语的文档。一旦找到初步的文本匹配项,就会应用过滤器排除不符合附加条件的结果。例如,在日志系统中查询“错误 404”可能会使用全文索引查找包含这些术语的日志条目,然后应用过滤器仅显示来自“生产”环境的条目。通过分离文本搜索和过滤阶段,系统优化了性能——文本匹配避免扫描不相关的数据,而过滤则在结果的较小子集上操作。
开发者可以通过使用查询 DSL(领域特定语言)或 API 来实现全文搜索中的过滤。例如,Elasticsearch 的 bool
查询允许将 must
子句(用于全文搜索)与 filter
子句(用于结构化条件)结合使用。类似地,像 MySQL 这样的 SQL 数据库支持 WHERE
子句以及 MATCH()
进行文本搜索。一个实际示例是电商网站:搜索“无线耳机”可以返回所有匹配的产品,并带有价格范围、品牌或客户评分的过滤器。这些过滤器通常利用元数据索引(例如,日期使用 B-树)来提高速度。虽然过滤提高了精度,但适当索引过滤字段以避免性能瓶颈非常重要,确保文本搜索和过滤都能高效运行。