0

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

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

  1. 自动完成:当用户输入一个单词(Wor)时,我想给他看(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

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

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

有什么解决方案可以满足我的需求吗?我更喜欢在 SQL Server 中将它们全部实现为 SP。

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

希特勒和墨索里尼为西班牙弗朗西斯科·佛朗哥将军领导的民族主义起义提供了大量的军事和财政支持。苏联支持现政府,西班牙共和国,表现出左倾倾向。此外,超过 30,000 名被称为国际旅的外国志愿者与佛朗哥作战。德国和苏联都利用这场代理人战争作为测试改进武器和战术的机会。1937 年 4 月,德国秃鹰军团对格尔尼卡的蓄意轰炸导致人们普遍担心下一场重大战争将包括对平民的广泛恐怖轰炸袭击。[30][31] 虽然有一些小范围的抵抗,但国民党阵线于 1939 年 4 月 1 日宣布胜利。 [32] 值得注意的是,五个月后,德国袭击了波兰,引发了第二次世界大战。

4

5 回答 5

3

我建议为此使用像 (Lucene) SOLR 这样的搜索引擎。它是为满足您的要求而量身定制的。现在 SOLR 确实需要 Java(通常使用 Tomcat)才能运行,但如果你能接受,使用 Solr.Net 是一种美妙的体验。

于 2013-05-02T06:24:57.230 回答
1

.net 中有几个汉明距离实现,您可以将它们安装到您的应用程序中以执行场景 3。

场景 2 听起来像是您的大量手动工作。上下文元数据是一头野兽。最简单的后端是使用表格来跟踪事物,但填充数据完全是另一回事。

于 2013-05-02T22:23:05.220 回答
0

您的查询也适用于第二种情况。对于第三个,您可以一个一个地使用您的字母,它们之间有通配符,因此您的 where 语句可能如下所示:

WHERE display_term LIKE 'W_o_r%'
于 2013-04-27T11:24:46.720 回答
0

仅用于第二个查询,您可以通过一次更改使用相同的查询

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

只需在您的单词和 % 符号后放置一个空格键。

于 2013-04-30T11:31:20.950 回答
0

您可以查看我们使用的 AmisaDB。涵盖了您使用简单的内置 sql 函数提到的所有 3 个场景。

于 2014-09-06T16:48:52.633 回答