SQL Server中的拼写检查和单词建议脚本

本文关键字:检查和 单词建 脚本 Server SQL | 更新日期: 2023-09-27 18:09:55

我正在使用ASP开发一个web应用程序。. NET和SQL Server 2008。我的数据库中大约有1,000,000篇文章,我已经激活了全文搜索。

现在,我想在文章中搜索,我需要3个功能的搜索文本框:

  1. 自动补全:当用户输入一个单词(单词)时,我想显示给他(World, Word,…).
  2. 术语建议:当用户输入一个词(世界)我想给他看下一个术语(第一次世界大战,第二次世界大战,……)
  3. 拼写检查:当用户输入错误的单词时,我要纠正它。

第一个场景很容易实现如下:

SELECT TOP 10 * 
FROM sys.dm_fts_index_keywords(db_id('MyDB'), object_id('Articles'))
WHERE display_term LIKE 'Wor%'
ORDER BY document_count DESC

我不知道如何实现第二种情况。在我看来,我应该创建一个表(FirstWord, SecendWord, Frequency)来存储术语序列及其频率(从文章内容中提取它们),并按频率搜索第一个单词顺序。

对于第三种情况:我读过拼写检查算法(ASpell,NSpell,…),我想知道是否有任何SQL Server + .NET实现它们?

有什么办法能满足我的需要吗?我更喜欢在SQL Server中实现所有的SP。

Update:这是我应该搜索的记录的内容:

希特勒和墨索里尼向弗朗西斯科·佛朗哥将军领导的西班牙民族主义起义提供了大量军事和财政支持。苏联支持当时表现出左派倾向的西班牙共和国政府。此外,三万多名外国志愿军,被称为国际旅,与佛朗哥作战。德国和苏联都把这场代理人战争作为测试改进武器和战术的机会。1937年4月,德国秃鹰军团(German Condor Legion)蓄意轰炸格尔尼卡(Guernica),引发了人们的广泛担忧,即下一场主要战争将包括对平民的大规模恐怖轰炸。[30][31]虽然有一些小的抵抗,但国民党阵线在1939年4月1日宣布胜利。[32]值得注意的是,5个月后,德国进攻波兰,第二次世界大战爆发。

SQL Server中的拼写检查和单词建议脚本

我建议使用像(Lucene) SOLR这样的搜索引擎。它是为你的要求量身定做的。现在SOLR确实需要Java(通常与Tomcat一起)来运行,但如果您可以接受这一点,请使用SOLR。

在。net中有几个汉明距离实现,你可以在你的应用程序中执行场景3。

场景2听起来你需要做很多手工工作。上下文元数据是一头猛兽。最简单的后端是使用表来跟踪事物,但填充数据则完全是另一回事。

您的查询也将适用于第二个场景。对于第三个,你可以一个接一个地使用字母,它们之间有野字符所以你的where语句可能像这样:

WHERE display_term LIKE 'W_o_r%'

仅对于第二个查询,您可以使用相同的更改

SELECT TOP 10 * 
FROM sys.dm_fts_index_keywords(db_id('MyDB'), object_id('Articles'))
WHERE display_term LIKE 'Wor %'
ORDER BY document_count DESC

只需在单词和%符号后面加一个空格。

您可以查看我们使用的AmisaDB。