首页 > 解决方案 > 在全文搜索中添加断字字符(下划线)

问题描述

我正在使用全文搜索来搜索用户名数据库(这些主要是电子邮件地址,但不是全部)。但是,由于“_”不被视为断词字符,因此很难搜索某些用户。

例如,搜索“pancakes*”将返回“bobby-pancakes”或“bobby@pancakes.com”的结果,但不会返回“_bobby_robert_pancakes@email.com”的结果。我需要一个匹配所有这些的搜索。

为了解决这个问题,我想将下划线视为断字字符,如空格或连字符。有没有办法更新全文搜索中哪些字符会破坏单词?

为什么不使用 LIKE 运算符?

不幸的是,我们有一个庞大的用户名数据库,而且速度太慢了。

自定义词典呢?

据我所知,自定义词典允许您阻止分词器破坏某些字符组合,但不允许您引入新的破坏字符。

自定义分词器怎么样?

我似乎找不到任何关于如何创建其中之一的文档。

标签: sql-serverfull-text-searchfull-text-indexing

解决方案


您必须根据此处的文档定义自己的语言以添加自定义分词器:https ://docs.microsoft.com/en-us/sql/relational-databases/search/configure-and-manage-word-breakers -and-stemmers-for-search?view=sql-server-2017

虽然这将为您在如何处理搜索字词方面提供最大的灵活性,但它也有责任在您家门口保持最新状态。随着 SQL Server 的升级,您在语言逻辑方面会慢慢落后,但如果您的要求相当简单,这应该不是什么大问题。


我强烈建议您实际阅读全文和链接文档,以真正了解您使用和修改全文搜索功能的含义。

但是,如果您不想这样做;在上面的链接文章中,您会发现一个名为If you add or remove a word breaks的部分。在本部分中是查看或更改已注册过滤器和分词器的链接,它解释了如何将新语言安装到 SQL Server 实例中。在左侧边栏中,您会发现大量关于全文搜索配置的文章,包括如何为一种语言创建自定义词典。


推荐阅读