0

SQL Server データベースに 2 つのフィールドを持つテーブルがあり、asp.net アプリケーションが '@SearchString' パラメータを使用してストアド プロシージャを呼び出し、ストアド プロシージャは @Searchstring 値が 2 つのフィールドの連結で見つかったすべてのレコードを検索しますテーブル、それらを 'Field1' および 'Field2' と呼びます

したがって、ロジックは次のようになります (実際のクエリを単純化しました)。

CREATE PROCEDURE [dbo].[sp_FindMatches] @SearchString varchar(30)
AS
  SELECT * FROM Table1 WHERE Field1+Field2 LIKE @SearchString

このかなり基本的なマッチング アルゴリズムを改善して、一致するレコードがそれほど制限されないようにしたいと考えています。たとえば、ユーザーが「DOG HOUSE」をパラメーターとして入力すると、既存の SP のかなり基本的なロジックによって、正確な文字列が見つかったレコードが返されます。文字列が正確に隣り合っていなくても、「DOG」と「HOUSE」だけのレコードも返すようにしたいと思います。

「最良の一致」に関してレコードをランク​​付けする方法があればさらに良いでしょう。つまり、「DOG HOUSE」が見つかった場合は完全一致であり、「DOG」と「HOUSE」が見つかった場合は 2 番目です。ベスト マッチ、「犬だが「家」または「家」ではなく、「犬」ではない場合」など。

私が望むことの多くを行う一般的なアルゴリズムはありますか?

4

2 に答える 2

2

全文検索を見てください。それはあなたが求めていることを正確に行うように特別に設計されており、非常にうまく機能します.

従来の TSQL を使用してこれを実装した方法では、影響を受ける列のインデックスはまったく使用できなくなります。

また、全文検索に怯える必要はありません。セットアップは驚くほど簡単です。

于 2009-06-11T13:18:11.387 に答える
0

2 つの列を連結するビューを作成し、ストアド プロシージャを介してそのビューで全文検索を使用します。

于 2009-06-11T13:23:43.523 に答える