全文搜索前缀搜索问题

Full Text Search Prefix Search problems

我有一个 SQL Server 2012 安装和几个全文索引列。 现在,我正在执行 CONTAINS() 搜索的几个全文索引列。

所以我的 table 有各种数据

"393033-H-X02.1", "393033-H-X03.1", "393033-J-X02.1", "393033-J-X03.1", "393033-J-X04.1"

Q1 - 现在当我进行这样的搜索时,我没有得到任何数据(注意末尾的星星)。

SELECT * FROM tblMyData where MyFullTextCoulm CONTAINS ('"393033-H-X02.1*"')

Q2 - 现在当我进行这样的搜索时,我得到了我的所有数据,但它也 return“393033-J-X02.1”

SELECT * FROM tblMyData where MyFullTextCoulm CONTAINS ('"393033-H-X02.1"')

我一直在阅读文档,我知道 PREFIXSQLServer full text 中搜索,但是它与我看到的不相关。

我只需要找到可以在该列的任何位置找到确切单词的行,尝试了非常慢的 LIKE 运算符。

任何类型的 help/suggestion 都表示赞赏,

您在全文索引中使用了 stoplist,这是导致问题的原因。如果您将全文索引配置为不使用非索引字表,然后重建索引,您的查询将产生您期望的结果。

非索引字表如何影响您的查询?首先,一些背景。诸如 393033-H-X02.1 之类的字符串在编制索引时会分成单独的字符串,例如:393033 + H + X02 + 1。因此,当您搜索 '"393033-H-X02.1"' 时,您实际上是在搜索多个词,就像搜索 '"this is a sentence"'.

一样

您的非索引字表不包括单个字母 (H) 和单个数字 (1)。这些词在全文搜索中会被忽略,所以 '"393033-H-X02.1"' 就像搜索 '"393033-*-X02.*"',其中 * 只匹配停用词。这就是为什么,根据您的 Q2,您在搜索 '"393033-H-X02.1"' 时会得到额外的结果,因为全文搜索引擎将 HJ 匹配,因为它们都是停用词。

您的 Q1 解释起来有点棘手。出于我从未理解的原因,跨多个字符串(包括停用词和通配符)的全文搜索有时会产生不可预测的结果。这就是您搜索 '"393033-H-X02.1*"' 时发生的情况。我希望我能更好地解释它,但我只是不知道确切的原因。但是,禁用非索引字表将防止此问题发生。