我正在一个应用程序中工作,其中客户端从前端发送关键字以获取简历,并通过使用 containstable 我们在该表的列中搜索该关键字并将结果返回到前端。
在我的应用程序中,我们最初以文本格式保存简历详细信息,之后我们开始添加 html 表单。现在搜索功能对于较旧的简历文本工作正常,但在 Html 的情况下没有得到预期的结果,所以我们可以做些什么来使包含可包含的搜索功能对它们都有效,即文本或 html
我正在一个应用程序中工作,其中客户端从前端发送关键字以获取简历,并通过使用 containstable 我们在该表的列中搜索该关键字并将结果返回到前端。
在我的应用程序中,我们最初以文本格式保存简历详细信息,之后我们开始添加 html 表单。现在搜索功能对于较旧的简历文本工作正常,但在 Html 的情况下没有得到预期的结果,所以我们可以做些什么来使包含可包含的搜索功能对它们都有效,即文本或 html
OY合租。你已经进入了全文索引的阴暗世界……这是一个艰难的攀登,所以把它装在我的朋友那里。=)
你遗漏了一些更精细的细节,所以在我们继续之前,我假设两件事:
包含简历文本的列是 varchar(max) 或 nvarchar(max)
您已在包含所述列的表上创建全文索引
现在,深入到细节。首先让我说我绝不是 SQL Server 全文索引专家(真的有人吗?)...我学到的东西是痛苦的反复试验,所以就这样吧。话虽如此,您的情况听起来与我今年早些时候遇到的情况非常相似,因为我们继承了一个系统,其中包括文本的全文索引列type(我们迁移到 varchar(max)),并且该列包含“纯”文本和 html 包装文本。我们面临的挑战是,当最终用户通过前端应用程序针对该全文索引执行搜索时,查询将同时获得纯文本和 html 的命中。因此,例如,如果用户搜索“Roman”,他们可能会从纯文本内容以及引用“Times New Roman”的 html 标记中返回命中……这不是所需的行为。
坏消息是我真的没有找到一个简单的解决方案。我知道的唯一可能的 SQL Server 端解决方案涉及将列的数据类型转换为 varbinary(max),创建一个将 varbinary(max) 列指定为“HTML”类型的“companion”列,然后利用Microsoft iFILTER for HTML...更多关于这里和这里的信息,以及一些很好的通用 BOL 资源这里和这里。
最后,我们确定这不是我们的道路,因为:
我们最终实现了有助于清理结果并充分满足该特定项目需求的应用程序端逻辑。
我不想完全阻止您尝试实现您正在尝试的目标,但我确实希望您至少睁大眼睛进入它,意识到挑战......希望这会为您节省一些挫败感和浪费的时间!
请帮社区一个忙,并将任何成功或经验教训发回 - 那里没有足够的信息,这将对其他人有很大帮助。
祝你好运!
查看文档msdn,您可以看到对于 varbinary(max) 或图像,您可以指定包含 varbinary(max) 列的文件类型的辅助列。
column_name [ TYPE COLUMN type_column_name ]
在建立索引时,全文引擎使用每个表行的类型列中的缩写来标识要对 column_name 中的文档使用哪个全文搜索过滤器。过滤器将文档加载为二进制流,删除格式信息,并将文档中的文本发送到断词器组件。有关详细信息,请参阅配置和管理搜索过滤器。