Sql-Server
全文索引搜尋返回意外結果
當我
TaxIdentityNumber
使用contains
意外結果搜尋時返回;結果包含與查詢不匹配的數字。例如,我使用'"5689523657*"'
並獲取5681254870
,5458976235
等作為結果進行搜尋。我重建了索引,但得到了相同的結果。我應該嘗試什麼?我錯過了什麼?完整的查詢:
SELECT * FROM [Contractors] [contractor] INNER JOIN [ReportDates] [reportDate] ON [contractor].[ReportDateId] = [reportDate].[Id] LEFT JOIN [Persons] [tempPersons] ON [contractor].[PersonId] = [tempPersons].[Id] LEFT JOIN [Organizations] [tempOrganiztions] ON [contractor].[OrganizationId] = [tempOrganiztions].[Id] LEFT JOIN [Organizations] [tempHolding] ON [contractor].[HoldingId] = [tempHolding].[Id] WHERE CONTAINS(([contractor].[TaxIdentityNumber]), '"5689523657*"')
在 SQL Server 2008 標準版上執行。查詢創建全文索引:
CREATE FULLTEXT CATALOG SPFTI; GO CREATE FULLTEXT INDEX ON [Contractors] (FullName, TaxIdentityNumber, RelatedOrganizationFullName) KEY INDEX ContractorPK ON SPFTI;
這是使用SQL Server 2008搜尋超過九位數字時的一個已知問題。當使用某些斷詞器時,數字以科學形式儲存,例如,導致誤報匹配。受影響的斷詞器之一是中性語言(lcid 0):
nn5d68952e+009
-- Result includes nn5d68952e+009 SELECT display_term FROM sys.dm_fts_parser('"5689523657*"', 0, 0, 0);
不以這種方式執行的語言是 us-english (lcid 1033):
-- Result includes nn5689523657 SELECT * FROM sys.dm_fts_parser('"5689523657*"', 1033, 0, 0);
上面的知識庫文章連結中提到了其他幾種解決方法和修復。