2009-08-14 30 views
0

私は、検索する複数の単語を受け入れることができる単純なフルサーチテキストをWebアプリケーションに追加したいと思います。
例検索項目: "オンラインSQLの本"フルテキスト検索クエリ

が、私はそれを変換する必要があります。

WHERE (CONTAINS(myColumn, '"Online*" and "sql*" and "books*"')) 
or : WHERE (CONTAINS(myColumn, '"Online* sql* books*"')) 
or maybe: WHERE (CONTAINS(myColumn, '"Online*"')) and (CONTAINS(myColumn, '"SQL*"')) and (CONTAINS(myColumn, '"books*"'))  

または多分それはFORMSOF(INFLECTIONALを( '使用することをお勧めします...

もう一つの問題

答えて

0

最初のフォームは、(CONTAINS(myColumn、 '"Online *" and "sql *" and "本* ")) - とにかくSQLは、クエリを解析する時間を費やした。

2番目の質問は利便性の問題です。 sql2005で文字列操作がうまくいけば、それをしてください。しかし、SQLインジェクションの問題を覚えているので、2回チェックしてください。

+0

はいsql-injectionが重要なので、もっと安全で高速になるでしょうか? – markiz

+0

私はあなたのストアドプロシージャの代わりに、変数を作成し、ストアドプロシージャ内の値などを連結するオーバーヘッドを作成するので、あなたのビジネスオブジェクトの内部に構築することをお勧めします(そして、一般的には良い方法ではありません)。 Dewfyが述べたように、SQLの文字列をサニタイズしてSQLインジェクションを避けるようにしてください。 –

+0

@ Benjamin&Dewfy、SQLインジェクションを防止するにはどうすればよいですか? – markiz

1

フルテキスト検索でSQLを使用する際の問題は、それが非常に遅くなり、それ以外の方法では成功させる検索ができなくなることです。また、SQL検索ではデータへの格付けの形式は提供されないため、用語を含むテキストがすべて上部に表示される可能性があります。

Lucene.netは、これらの2つの問題に対処するために、適切な単語をエントリに簡単に作成できるように作成されました。そうすることで、単語が特定のエントリ内でどのくらい頻繁に使用され、ランキング情報を提供するかを確認することもできます。単一の検索で検索結果と実行速度の両方の面で、特に、より多くの検索をサポートするために拡大縮小したときの両方で、SQLをタスクに使用するとパフォーマンスが大幅に向上します。