0

ASP.NET と SQL Server 2008 を使用して Web アプリケーションを開発しています。DB に約 1,000,000 件の記事があり、全文検索を有効にしました。

今、記事を検索したいのですが、検索テキストボックスに3つの機能が必要です:

  1. オートコンプリート: ユーザーが単語 (Wor) を入力すると、彼に表示したい (World、Word、...)。
  2. 用語の提案: ユーザーが単語 (World) を入力すると、次の用語 (第一次世界大戦、第二次世界大戦、...) を表示したいと思います。
  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

2 番目のシナリオを実装する方法がわかりません。IMO テーブル(FirstWord、SecendWord、Frequency)を作成して、用語シーケンスとその頻度を保存し(記事のコンテンツから抽出)、最初の単語の順序を頻度で検索する必要があります。

3 番目のシナリオ: スペル チェック アルゴリズム (ASpell、NSpell など) について読んだことがありますが、それらの SQL Server + .NET 実装があることを知りたいですか?

私のニーズを満たす解決策はありますか?私はそれらすべてを SQL Server の SP として実装することを好みます。

更新:検索する必要があるレコードの内容は次のとおりです。

ヒトラーとムッソリーニは、スペインでフランシスコ・フランコ将軍が率いる民族主義者の暴動に多くの軍事的および財政的支援を与えました。ソビエト連邦は、左派の傾向を示した現政権であるスペイン共和国を支持した。さらに、国際旅団として知られる 30,000 人を超える外国人志願兵がフランコと戦った。ドイツとソ連は、この代理戦争を改良された武器と戦術をテストする機会として利用しました。1937 年 4 月にドイツのコンドル軍団が意図的に行ったゲルニカ爆撃は、次の大規模な戦争には民間人に対する大規模なテロ爆撃が含まれるという広範な懸念に貢献した. 抵抗の小さなポケットがいくつかあったが、1939 年 4 月 1 日に国民党戦線が勝利を宣言した [32]。5 か月後、ドイツがポーランドを攻撃し、第二次世界大戦が始まったことに注意してください。

4

5 に答える 5

1

.net には、シナリオ 3 を実行するためにアプリに組み込むことができるハミング距離の実装がいくつかあります。

シナリオ 2 は、多くの手動作業のように思えます。コンテキスト メタデータは野獣です。最も簡単なバックエンドはテーブルを使用して物事を追跡しますが、データを入力することはまったく別の話です.

于 2013-05-02T22:23:05.220 に答える
0

2番目のクエリのみ、1回の変更で同じものを使用できます

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 に答える