【问题标题】:Adding a word breaking character (underscore) to full text search在全文搜索中添加断字字符(下划线)
【发布时间】:2019-11-30 05:30:11
【问题描述】:

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

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

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

为什么不使用 LIKE 运算符?

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

自定义词典怎么样?

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

自定义分词器怎么样?

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

【问题讨论】:

    标签: sql-server full-text-search full-text-indexing


    【解决方案1】:

    您必须根据此处的文档定义自己的语言以添加自定义分词器: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 breaker 的部分。此部分中包含指向 View or Change Registered Filters and Word Breakers 的链接,该链接说明了如何将新语言安装到 SQL Server 实例中。在左侧边栏中,您会发现大量关于全文搜索配置的文章,包括如何为一种语言创建自定义词典。

    【讨论】:

    • 定义自定义语言将是完美的。不幸的是,您链接的文档(以及我找到的其他文档)似乎没有描述如何执行此操作
    • @JacobSoderlund 我建议以后更彻底地阅读文档。我已经用细节更新了我的答案。
    • 谢谢你。我似乎仍然找不到任何关于如何创建或修改过滤器/分词器/语言的提及。我能找到的最接近的是对需要安装的 DLL 的引用,所以我认为这将涉及创建某种 DLL。看起来这比它的价值更麻烦。
    猜你喜欢
    • 2022-09-23
    • 2019-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多