Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在SQL Server中,如何将全文搜索配置为索引1/2、1/3、1/4等_Sql Server_Tsql_Search_Indexing_Full Text Search - Fatal编程技术网

Sql server 在SQL Server中,如何将全文搜索配置为索引1/2、1/3、1/4等

Sql server 在SQL Server中,如何将全文搜索配置为索引1/2、1/3、1/4等,sql-server,tsql,search,indexing,full-text-search,Sql Server,Tsql,Search,Indexing,Full Text Search,我已为以下内容创建了替换同义词表条目: 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等。就此而言,我还需要在全文搜索

我已为以下内容创建了替换同义词表条目:

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等。就此而言,我还需要在全文搜索中使用单个数字

如果有人能给我提供一些文档,介绍我完成这项任务的步骤,我将不胜感激。

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

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

sys.dm_fts_解析器是一个很好的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忽略“/”符号,在本例中,它将“/”符号视为单词分隔符

编辑-显然,有一个解决方法,它包括创建一个自定义词典作为一个模板。因此,对于英语,我在Binn目录中创建了一个“Custom0009.lex”文件,并为“/”添加了一个条目。这样做将显示sys.dm_fts_解析器的以下输出(别忘了重新启动fdhost)——


希望这能有所帮助。

sys.dm_fts_解析器是一个很好的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忽略“/”符号,在本例中,它将“/”符号视为单词分隔符

编辑-显然,有一个解决方法,它包括创建一个自定义词典作为一个模板。因此,对于英语,我在Binn目录中创建了一个“Custom0009.lex”文件,并为“/”添加了一个条目。这样做将显示sys.dm_fts_解析器的以下输出(别忘了重新启动fdhost)——


希望这能有所帮助。

仅作评论。什么是单词的规则并不清楚。Stopword可以用来消除错误。似乎单个数字不被视为单词和/或被视为分词。我希望你能得到答案。不知道Lucene有多大的控制,但我不明白你的意思是“当我用一个搜索词搜索,比如“1/2英寸管道”时,我应该得到包含“1/2”和“半”的行。您希望全文将“1/2”和“一半”解释为等效表示吗?是的,@aks,我希望全文将我可能的昵称解释为“视觉等效”对,例如我的1/2和一半示例。原因很简单,我进行全文搜索时使用的文本内容包含常见的方言短语,如“钢管,1/2英寸直径”。在这种情况下,当有人使用包含搜索短语“半英寸管道”的查询进行搜索时,结果应包括“钢管,1/2英寸直径”只是一个评论。什么是单词的规则并不清楚。Stopword可以用来消除错误。似乎单个数字不被视为单词和/或被视为分词。我希望你能得到答案。不知道Lucene有多大的控制,但我不明白你的意思是“当我用一个搜索词搜索,比如“1/2英寸管道”时,我应该得到包含“1/2”和“半”的行。您希望全文将“1/2”和“一半”解释为等效表示吗?是的,@aks,我希望全文将我可能的昵称解释为“视觉等效”对,例如我的1/2和一半示例。原因很简单,我进行全文搜索时使用的文本内容包含常见的方言短语,如“钢管,1/2英寸直径”。在这种情况下,当有人使用包含搜索短语“半英寸管道”的查询进行搜索时,结果应包括“钢管,1/2英寸直径”在我的例子中,使用
like
不是一个选项。当然,其他人在全文索引中使用的是包含1/2等形式分数的数据。在我的例子中,使用
like
不是一个选项。当然,其他人在全文索引中使用的是包含1/2等形式分数的数据。