sql-server - 在全文搜索中添加断字字符(下划线)
问题描述
我正在使用全文搜索来搜索用户名数据库(这些主要是电子邮件地址,但不是全部)。但是,由于“_”不被视为断词字符,因此很难搜索某些用户。
例如,搜索“pancakes*”将返回“bobby-pancakes”或“bobby@pancakes.com”的结果,但不会返回“_bobby_robert_pancakes@email.com”的结果。我需要一个匹配所有这些的搜索。
为了解决这个问题,我想将下划线视为断字字符,如空格或连字符。有没有办法更新全文搜索中哪些字符会破坏单词?
为什么不使用 LIKE 运算符?
不幸的是,我们有一个庞大的用户名数据库,而且速度太慢了。
自定义词典呢?
据我所知,自定义词典允许您阻止分词器破坏某些字符组合,但不允许您引入新的破坏字符。
自定义分词器怎么样?
我似乎找不到任何关于如何创建其中之一的文档。
解决方案
您必须根据此处的文档定义自己的语言以添加自定义分词器: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 实例中。在左侧边栏中,您会发现大量关于全文搜索配置的文章,包括如何为一种语言创建自定义词典。
推荐阅读
- android-studio - 驻留在外部 jar 中的 Kotlin @Serializable 上的注释处理
- python - 给定一个小写字符串's',返回字符串中仅出现一次的第一个字符的索引
- python-3.x - 深度学习中大数据框的 MemoryError
- opengl - OpenGL glScissors 坐标系中心
- asynchronous - 强制同步循环http请求
- c++ - dllexport 类模板实例(专业化),减少仅头文件模板库的编译时间
- javascript - 如何在 React Native 的右下角放置浮动操作按钮
- html - 跨行和列连接表格中的某些单元格
- svelte - 使用汇总的 sapper 客户端构建中的外部和全局变量
- html - Bootstrap 4 马赛克布局