0

我实现了一个多对多标签系统,现在我想执行全文搜索。问题是 AND 不起作用。如果我使用 search terms 搜索项目,tag1 AND tag2 AND tag3即使我的记录被所有三个标签标记,我也不会得到任何行。

为了解决这个问题,我尝试了一个标量函数来连接我的标签并将其包装在一个视图中。但是,这失败并出现以下错误:

无法在视图“视图”上创建索引,因为视图引用的函数“dbo.GetTags”执行用户或系统数据访问。

我已将搜索限制为仅 OR,但我现在有另一个多对多关系,该关系在join表中包含我也想搜索的附加信息,并且需要 AND。

我能想到的唯一选择是unioning一堆inner joins或使用触发器。

有没有人有解决这个问题的经验或建议?

4

1 回答 1

0

如果您正在查找标签,您可以使用 like 运算符进行搜索吗?或者有什么理由需要全文搜索?

否则,要在 AND 时尚搜索标签中使用全文搜索,假设您在标签数据模型中每行存储一个标签,有两个想法:

  1. 将您的全文搜索分解为每个全文搜索 1 个查询。因此,如果有 3 个 and 条件,则为每个 AND 条件创建 3 个单独的全文搜索查询

  2. 弄清楚如何将所有标签连接到逗号分隔的列表中。将逗号分隔的列表存储在数据模型中,可能存储在包含实际数据的表中,而不是标签中。正如您所想,您可以使用触发器来存储值。然后针对该一列而不是您的标记模型运行您的全文搜索操作。此选项是由于视图中的函数调用而无法创建索引视图的解决方法

选项 2 可能比选项 1 执行得更好,但需要更多存储空间。

于 2012-08-08T18:09:27.507 回答