Sql-Server

全文索引搜尋返回意外結果

  • April 14, 2014

當我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);

上面的知識庫文章連結中提到了其他幾種解決方法和修復。

引用自:https://dba.stackexchange.com/questions/63118