Dru*_*der 3 t-sql sql-server full-text-search
我在SQL Server 2008 R2上面临一个问题,我必须使用包含搜索而忽略德语Umlaute-Letters(ä,ö,ü).
对于所有非德语的开发人员:德语变音字母可以表示为常规基础字母(使用ä时)和e.所以穆勒和穆勒一样,巴克尔和巴克尔一样.
我们想要做的是:当搜索"Müller"时,我们希望找到包含"Mueller"和"Müller"的数据,当输入"Mueller"时,我们希望找到包含"Müller"以及"穆勒".
使用like或=比较数据时,只需附加COLLATE German_PhoneBook_CI_AI即可.当使用包含全文索引的搜索时,这并不容易.您可以将重音敏感度设置为关闭,但是包含搜索将ü-字母视为u,ä-字母像a和ö字母一样o,它不会找到包含oe而不是ö的条目,ue而不是ü和ae而不是ä.
将列上的排序规则设置为"German_Phonebook_CI_AS"或"German_Phonebook_100_CI_AS"似乎也没有帮助.
以前有人遇到过同样的问题吗?
您应该按照以下步骤操作:
请参阅以下示例:
CREATE TABLE MyTable (
ID int IDENTITY CONSTRAINT PK_MyTable PRIMARY KEY,
Txt nvarchar(max) COLLATE German_PhoneBook_100_CI_AI NOT NULL
)
INSERT INTO dbo.MyTable
VALUES (N'Müller'), (N'Mueller'), (N'Muller'), (N'Miller')
GO
CREATE FULLTEXT CATALOG FTSCatalog WITH ACCENT_SENSITIVITY=ON AS DEFAULT
CREATE FULLTEXT INDEX ON MyTable (Txt LANGUAGE German) KEY INDEX PK_MyTable
GO
WHILE EXISTS (
SELECT * FROM sys.dm_fts_index_population
WHERE database_id=DB_ID()
AND status<>7
) WAITFOR DELAY '0:0:1'
GO
SELECT * FROM CONTAINSTABLE(dbo.MyTable,Txt,N'FORMSOF(INFLECTIONAL,Müller)')
SELECT * FROM CONTAINSTABLE(dbo.MyTable,Txt,N'FORMSOF(INFLECTIONAL,Muller)')
SELECT * FROM CONTAINSTABLE(dbo.MyTable,Txt,N'FORMSOF(INFLECTIONAL,Mueller)')
GO
DROP FULLTEXT INDEX ON MyTable
DROP FULLTEXT CATALOG FTSCatalog
GO
DROP TABLE dbo.MyTable
Run Code Online (Sandbox Code Playgroud)
lig*_*t78 -3
我建议您搜索M\xc3\xbcller和Mueller出现在这种情况下。
| 归档时间: |
|
| 查看次数: |
4889 次 |
| 最近记录: |