可能是一个菜鸟问题,但我会继续这样做。
为了举例,我有一个Person表,一个Tag表和一个ContactMethod表。一个人将拥有多个Tag记录和多个与之关联的ContactMethod记录。
我想进行宽容的搜索,搜索每个表格中的几个字段。所以我可以通过他们的电子邮件(通过ContactMethod)找到一个人,他们的名字(通过Person)或分配给他们的标签。
作为FTS的完整菜鸟,我想到了两种方法:
(为清晰起见,请随意编辑;我不是为了重复点而进行编辑。)
答案 0 :(得分:0)
一种可能性是创建具有以下列的视图:PersonID,ContentType,Content。 ContentType将类似于“电子邮件”,“电话号码”等......而内容将保持这一点。您将在“内容”列中搜索,并且您将能够看到此人的ID。我不是100%肯定全文搜索的工作原理,所以我不确定你是否可以在视图上使用它。
答案 1 :(得分:0)
FTS可以search multiple fields开箱即用。 CONTAINS谓词接受要搜索的列的列表。还CONTAINSTABLE。
答案 2 :(得分:0)
如果您的sql server支持它,您可以创建索引视图和全文搜索;你可以使用containsstable(*,'“chris”')来读取所有列。
如果它不支持它,因为字段都来自不同的表,我认为可扩展性; 如果您可以在单独的表中轻松地将字段填充到每个记录的单行中,我将全文搜索而不是单个记录。您将得到一个不太复杂的FTS目录,您的查询一次不需要进行4次全文搜索。在同一时间在不同的表上运行大量单独的FTS查询是根据我的经验查询性能问题的一张票。这样做的缺点是你失去了自己搜索Surname的能力;如果这是你需要的东西,你可能需要看一个替代方案。
在我们的应用程序中,我们发现单个表更快(我们不能依赖手头有企业sql的客户);所以我们通过更新sp将带有空格的数据填充到FTS表中,然后我们的主要联系人查找在列表上运行搜索。我们有两个单独的搜索来处理精确查找事物(即姓名或电话号码)或仅用于自由文本。关于该表的另一个好处是,在查找中添加更多列是相对容易和低成本的(例如我们已经被要求提供社会安全号;为此我们只是将列添加到更新SP而我们离开了很少或没有影响。