重构：把搜索模块独立出来