【问题标题】:In SQL Server, how to configure Fulltext Search to index 1/2, 1/3, 1/4, etc在 SQL Server 中,如何配置全文搜索以索引 1/2、1/3、1/4 等
【发布时间】:2013-03-27 02:47:06
【问题描述】:

我为以下内容创建了替换词库条目:

Pair: 1/2, half
Pair: 1/3, third
Pair: 1/4, quarter
Pair: 1/8, eighth

当我使用诸如“1/2 英寸管道”之类的搜索词进行搜索时,我应该得到包含“1/2”和“一半”的行。我有两个这样的行。但是,使用开箱即用的默认全文搜索,似乎“1/2”不包含在相关列的全文索引结果中。

我还没有找到关于什么、在哪里、如何配置全文列的重新索引以使全文搜索条件包括允许 1/2、1/3 等的明确答案。就此而言,我还需要全文搜索中的单个数字。

如果有人可以指导我查阅一些文档,其中包含我可以完成此任务的步骤,我将不胜感激。

【问题讨论】:

  • 只有一条评论。什么是单词的规则并不明确。停用词可用于消除。似乎单个数字不被视为一个单词,并且 / 被视为一个单词中断。我希望你能得到答案。不确定 Lucene 有多少控制权,但需要考虑一些事情。
  • 不确定我是否理解您所说的“当我使用诸如“1/2 英寸管道”之类的搜索词进行搜索时,我也应该返回包含“1/2”的行作为“一半”!您希望全文将“1/2”和“一半”解释为等效表示吗?
  • 是的,@aks,我希望全文解释我可能昵称的“视觉等效”对,例如我的 1/2 和一半的示例。原因很简单,我在全文搜索时使用的文本内容包含常见的白话短语,例如“钢管,直径 1/2 英寸”。在这种情况下,当有人使用包含搜索短语“半英寸管道”的查询进行搜索时,结果应该包括“钢管,直径 1/2 英寸”。

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


【解决方案1】:

sys.dm_fts_parser 是一个很棒的 DMF,可以让您了解全文如何解析句子以及将哪些单词存储在内部索引中。对于您的第一个示例,我看到以下输出 -

select * from sys.dm_fts_parser(N'"Pair: 1/2, half"', 1033, 0, 0)

keyword group_id    phrase_id   occurrence  special_term    display_term    expansion_type  source_term
0x0070006100690072     1    0   1   Exact Match pair    0   Pair: 1/2, half
0x0031                 1    0   2   Noise Word  1       0   Pair: 1/2, half
0x006E006E0031         1    0   2   Noise Word  nn1     0   Pair: 1/2, half
0x0032                 1    0   3   Noise Word  2       0   Pair: 1/2, half
0x006E006E0032         1    0   3   Noise Word  nn2     0   Pair: 1/2, half
0x00680061006C0066     1    0   4   Exact Match half    0   Pair: 1/2, half

FT 分解“1/2”并将其索引为 1、nn1、2 和 nn2('nn' 是数值的内部表示)。在这种情况下,将使用默认停止列表,这还会导致这些值被标记为噪声词,因此它们不会添加到索引中。通过从停止列表中删除条目或创建一个新的空白停止列表并将其与索引相关联,这很简单。

到目前为止,根本没有任何方法可以让 FT 忽略在这种情况下它被视为单词分隔符的“/”符号。

编辑 - 显然,有一个解决方法,它涉及创建一个自定义字典作为detailed here。因此,对于英语,我在 Binn 目录中创建了一个“Custom0009.lex”文件,并为“/”添加了一个条目。这样做会显示 sys.dm_fts_parser 的以下输出(不要忘记重新启动 fdhost) -

select * from sys.dm_fts_parser(N'"Pair: 1/2, half"', 1033, NULL, 0)

keyword             group_id    phrase_id   occurrence  special_term    display_term    expansion_type  source_term
0x0070006100690072  1   0   1   Exact Match pair    0   Pair: 1/2, half
0x0031              1   0   2   Exact Match 1       0   Pair: 1/2, half
0x006E006E0031      1   0   2   Exact Match nn1     0   Pair: 1/2, half
0x002F              1   0   3   Exact Match /       0   Pair: 1/2, half
0x0032              1   0   4   Exact Match 2       0   Pair: 1/2, half
0x006E006E0032      1   0   4   Exact Match nn2     0   Pair: 1/2, half
0x00680061006C0066  1   0   5   Exact Match half    0   Pair: 1/2, half

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    我的最佳猜测是全文搜索不支持“/”字符。 我建议使用 LIKE,虽然速度较慢。

    【讨论】:

    • 在我的情况下,like 的使用不是一个选项。
    • 肯定其他人在全文索引中使用包含 1/2 等形式的分数的数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多