Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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全文搜索中的后缀词_Sql Server_Full Text Search - Fatal编程技术网

Sql server SQL Server全文搜索中的后缀词

Sql server SQL Server全文搜索中的后缀词,sql-server,full-text-search,Sql Server,Full Text Search,根据文章,“CONTAINS”TSQL函数有一个名为prefix_term的参数,文档中说: Specifies a match of words or phrases beginning with the specified 文本。将前缀项用双精度括起来 引号(“”)并添加 结尾前的星号(*) 引号,使所有文本 从简单的术语开始 在星号之前指定 匹配 这是前缀,如果我搜索“Ira*”,它会找到“伊朗,伊朗,伊拉克,易怒的,等等” 但我在寻找后缀词,所以如果我搜索“*ran”,那么我希望在结

根据文章,“CONTAINS”TSQL函数有一个名为prefix_term的参数,文档中说:

Specifies a match of words or phrases beginning with the specified
文本。将前缀项用双精度括起来 引号(“”)并添加 结尾前的星号(*) 引号,使所有文本 从简单的术语开始 在星号之前指定 匹配

这是前缀,如果我搜索“Ira*”,它会找到“伊朗,伊朗,伊拉克,易怒的,等等”

但我在寻找后缀词,所以如果我搜索“*ran”,那么我希望在结果中看到伊朗、三体船等

我该怎么做

[更新]

我在ArticleContent栏中有这样一个词:

f5_Iran_three_islands
此查询捕获它:

Select Code,ArticleContent from Articles Where ArticleContent Like '%Ira%'
但我无法通过此查询捕获此行:

Select Code FROM Articles WHERE CONTAINS(ArticleContent, '"*Ira*"')

[/UPDATE]

正如您所发现的,文档中声明,只有前缀术语才能以这种方式使用。

如果您希望使用后缀术语,可以使用标准通配符搜索(如ETC),或者考虑编写利用ReGEX搜索的.NET存储过程。我以前做过,虽然将sp加载到服务器是一件痛苦的事(.NET2,SQLServer2005),但sp的编写并没有那么困难

伊朗:)也陷入了同样的问题。可以在另一列中创建文本的反转副本,然后也可以查找反转值

declare @value varchar(50), @value_contains varchar(53), @value_contains_reverse varchar(53)
set @value = '20602019';
set @value_contains = '"'+@value+'*"';
set @value_contains_reverse = '"'+reverse(@value)+'*"';
select charindex(@value, matchstring) from Table 
where contains(matchstring, @value_contains) or contains(matchstring_reverse,@value_contains_reverse)

我认为,在SQL Server中进行全文搜索时,这是一个常见的误解

全文搜索可以搜索整个单词以及许多其他内容。从包含文档的

包含可以搜索的内容:

一个词或短语

单词或短语的前缀

一个词接近另一个词

从另一个词(例如,单词)以屈折方式生成的词 驱动器是驱动器(驱动、驱动和被驱动)的弯曲阀杆

同义词使用同义词库的另一个单词的同义词(例如 例如,“金属”一词可以有同义词,如“铝”和“铝” “钢”)

所以就像文本字符串上的普通索引一样,您可以进行前缀搜索

全文搜索和普通SQL Server索引都不支持在单词或文本字符串中进行“后缀”或“包含”搜索。所以基本上没有前导通配符

请注意,同样的限制也适用于CONTAINSTABLE:

CONTAINSTABLE适用于与CONTAINS谓词相同类型的匹配,并使用与CONTAINS相同的搜索条件

我认为存在这些限制是因为索引在SQL Server中以b树的形式逻辑存储,在b树中,很容易根据索引列中数据的开头“跳转”或“查找”到索引的不同部分