背景
我目前正在重写一个搜索引擎......我最初是在几年前匆忙写的:)
今天,搜索包含约 5 种不同的内部业务对象/表:用户、组织、新闻标题等。因此,当用户在"The Quick Brown Fox"
搜索框中键入时,他/她将获得每种类型的业务对象的结果。
每个业务对象都有一个关联的存储过程:spSearchUsers
、spSearchOrganizations
等。
问题
现在,对于每次搜索,我为每种业务对象类型多次调用每个存储过程(通过 BL -> 数据访问层)。例如,当用户搜索 时"The Quick Brown Fox"
,我将整个字符串原封不动地发送下来,但也将字符串拆分为每个空格,并单独搜索每个单词。
在这种情况下,每个存储过程被调用 5 次……对于一次搜索,总共需要 25 个单独的数据库调用。我不觉得这是典型的......但它仍然运行得很快。每次搜索大约需要 4-5 秒。
我想创造什么
单个“主”存储过程获取整个搜索字符串"The Quick Brown Fox"
,该字符串依次调用每个单独的业务对象存储过程(spSearchUsers
、spSearchOrganizations
等),执行一点逻辑,并返回 1 个结果集。
所以 1 个搜索... 1 个结果。
这可以使用存储过程、函数和/或用户定义的表类型来实现吗?