SQL Server全文索引搜索异常:通配符查询无法返回预期结果
SQL Server全文索引搜索异常原因分析
短语前缀查询的匹配规则限制
你使用的"Other*"属于短语前缀查询(带双引号的前缀匹配语法),SQL Server会将其解析为:需要匹配以"Other"开头的完整连续短语。而"Other 11"会被全文索引的语言断词器(默认按空格分隔)拆分为两个独立的索引词:Other和11,并非一个连续的短语单元,因此"Other*"无法匹配到这条记录。
当你使用"Other 11"时,是精确短语匹配,自然能命中对应的记录。词前缀与短语前缀的语法差异
如果需要匹配所有包含以Other开头的词的记录(包括"Other 11"这类Other后跟随其他内容的情况),应该去掉双引号,使用词前缀查询语法:SELECT KEY_TBL.RANK, FT_TBL.Firstname FROM [user].[User] AS FT_TBL INNER JOIN CONTAINSTABLE([user].[User], Firstname, 'Other*') AS KEY_TBL ON FT_TBL.UserId = KEY_TBL.[KEY] ORDER BY KEY_TBL.RANK DESC GO这种语法会匹配所有包含以
Other开头的独立词的记录,不管该词后面是否有其他内容。FREETEXTTABLE的类似问题根源
FREETEXTTABLE是基于语义的模糊搜索,它会将查询内容拆分为独立的词进行匹配。如果出现无法匹配的情况,大概率是因为断词器将目标文本拆分为多个词后,查询词的语义权重或匹配逻辑未覆盖到(比如数字"11"被识别为非核心语义词),本质还是全文索引的分词规则导致的匹配范围差异。
内容的提问来源于stack exchange,提问作者El Mac
相关产品推荐
相关产品推荐

