T-SQL包含SQL Server 2008 R2上的搜索和德语变音

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"似乎也没有帮助.

以前有人遇到过同样的问题吗?

Raz*_*col 6

您应该按照以下步骤操作:

  1. 使用重音敏感度创建全文目录
  2. 创建指定德语的全文索引
  3. 查询时使用'FORMSOF(INFLECTIONAL,yourquery)'

请参阅以下示例:

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\xbcllerMueller出现在这种情况下。

\n

  • 是的,因为您将如何处理“Cügülü”或“Kögeräspensmüller”的搜索? (2认同)