全文検索を提案します(MSまたはLuceneが機能します)。以下のコードでは、現在アプリで使用しているものとしてMSSQLFTSを使用しています。
まだインストールしていない場合は、FTS検索をインストールします。サービスが実行されていることを確認した場合。ManagementStudioでこれを実行してカタログを設定し、製品テーブルを追加します。と色/名前/製品番号をカタログに追加します。
USE [AdventureWorks]
GO
CREATE FULLTEXT CATALOG [ProductsTest]WITH ACCENT_SENSITIVITY = OFF
AUTHORIZATION [dbo]
GO
USE [AdventureWorks]
GO
CREATE FULLTEXT INDEX ON [Production].[Product] KEY INDEX [PK_Product_ProductID] ON ([ProductsTest]) WITH (CHANGE_TRACKING AUTO)
GO
USE [AdventureWorks]
GO
ALTER FULLTEXT INDEX ON [Production].[Product] ADD ([Color])
GO
USE [AdventureWorks]
GO
ALTER FULLTEXT INDEX ON [Production].[Product] ADD ([Name])
GO
USE [AdventureWorks]
GO
ALTER FULLTEXT INDEX ON [Production].[Product] ADD ([ProductNumber])
GO
USE [AdventureWorks]
GO
ALTER FULLTEXT INDEX ON [Production].[Product] ENABLE
GO
その後、すべての列に対して一度にクエリを実行できます。例えばシルバー(色と名前で選択)
Select * from production.product where
contains(*, '"Silver*"')
クエリの*はSilver*を見つけるので、ユーザーが入力したときにこれを使用して結果を構築できます。考慮すべきことの1つは、Googleがこれをリアルタイムで機能させることです。大量のデータを検索している場合は、ユーザーの入力を中断せずにデータを取得します。一般的に、人々は探している最初の文字から入力してこれらの検索を使用すると思います-スペルミスがあることを受け入れます-おそらくそれを処理するために押すすべてのスペースの後にスペルチェッカーを実装できます。または、実行された検索を保存してスペルミスを確認し、マッピングに基づいて(またはカスタムシソーラスを使用するFTSで)それを処理するようにコードを変更します。
ランキングはどんなビジネスにとっても楽しい開発の問題になるでしょう。 Mountain Frameの最初の結果を見つけていますか?それとも売上や価格で重み付けしたいですか?ユーザーが複数のテキスト用語を入力した場合、FTSを使用して、検索文字列に基づいてランキングを作成できます。
select aa.rank, bb.*
From containstable(production.product, *, '"Mountain" and "Silver*"') aa
inner join production.product bb
on aa.[key] = bb.productid
order by rank desc
これは30行を返します。ユーザーが入力したテキストに基づいて重みを付け、1位のレコードを決定します。どちらの場合でも、コード化されたランキングを追加して、ビジネスの要望に合わせて結果を微調整することをお勧めします。最高価格のウィジェット1をランク付けするのは方法ではない場合があります。そのため、後で結果を分析できるように、ユーザーが検索/クリックしたものを保存します。
本当に素晴らしい
また、ユーザーが入力した内容を監査し、最終的に成功マップにアクセスして成功マップを使用して最終的な提案を変更し、実際にユーザーに関連性を持たせることで、群衆の機能の知恵を追加することもできます。
これが商用Webサイトである場合の最後の提案として、Easyask を参照することをお勧めします。 これは恐ろしい素晴らしい自然言語プロセッサです