1

シナリオは...

私はASP.netVisual Basicで、ユーザーが作成した製品リスト (以下「投稿」と呼びます) を表示する Web サイトを開発しています。このサイトには、ユーザーが自分の投稿をより簡単に見つけられるようにする検索ボックスがあります。検索ボックスは、ユーザーが特定のキーワードを入力できるように設計されており、よりカスタマイズされた検索が提供されることが期待されます。例えば:

検索ボックスの例

上記の例では、ユーザーは、"John Smith" という名前に一致する著者と "Crime" および "Suspense" というタグを持つ本を検索することを指定しています。

手順:

  1. 私の SearchBoxManager クラスは、これらのキー名 (Author、Tags) とキー値 (John Smith、Crime、Suspense) を取得します。
  2. これらのパラメーターを使用して SQL クエリを実行し、完全一致を探します。
  3. キー値から各単語を抽出して、個別に検索できるようにします。
  4. これは私が問題を抱えているところです。これらのパラメーターを使用して SQL クエリを実行し、完全に一致しないものを探します (たとえば、'%John%'、'%Smith%')。このステップでは、関連性に基づいて結果のシステムを作成します。これは私の最初の関連性アルゴリズムであるため、間違った方法で行っている可能性があります。

問題...

3 番目のステップが適切に機能するように、キー値から分離された単語の各セットをテーブル値パラメーターに配置し、ワイルドカード '%' で囲まれた SqlCommandText でそのテーブル値パラメーターを使用したいと考えています。

つまり、各キー値の単語数は毎回変わる可能性があるため、それらを何らかのテーブル値パラメーターに配置する必要があります。また、どうにかしてそれらをつなぎ合わせてクエリ文字列で直接使用することもできると思いますが、少し面倒になったので途中でやめました。


質問...

  • テーブル値パラメーターでワイルドカードを使用できますか?

また、ローカル検索ボックスの関連性ランキング アルゴリズムを開発したことがある、またはそれを知っている方がいらっしゃいましたら、正しい方向に向けていただければ幸いです。

前もって感謝します。

4

1 に答える 1

1

いくつかのサンプルデータ

create table authors ( id int, name varchar(200) )
insert into authors values (1, 'John Smith')
insert into authors values (2, 'Jack Jones')
insert into authors values (3, 'Charles Johnston')

テーブル var を使用したい場合は、テーブル var を作成し、いくつかの検索語を入力できます。

declare @t table(word varchar(10) )
insert into @t select 'smith' union select 'jones' 

ワイルドカードを使用して選択できるようになりました

select authors.* from authors, @t words 
where authors.name like '%'+words.word+'%'
于 2013-04-23T21:45:42.700 に答える