2009-03-12 24 views
3

複数のsearchtermを入力してAND条件を構成できる検索を実装しようとしています。また、データベースのさまざまなフィールドで検索する必要があります。例えばのでSQLクエリ - 複数のフィールドにわたる検索


あなたが"ビル・シアトル"を入力すると、あなたはNAME試合ビルCITY試合シアトルレコードを取得する必要があります。 CITYシアトルと一致する行は表示されません。

これは複雑ではありませんが、実際は思ったよりも難しいようです。

SELECT * FROM ADDRESS WHERE 
((NAME LIKE 'Bill%') OR (NAME LIKE 'Seattle%')) 
AND 
((CITY LIKE 'Bill%') OR (CITY LIKE 'Seattle%')) 

これが私たちの前のケースでうまく動作しますが、我々は別のフィールドを追加するとします:今、それは望ましい結果を返しません

SELECT * FROM ADDRESS WHERE 
((NAME LIKE 'Bill%') OR (NAME LIKE 'Seattle%')) 
AND 
((CITY LIKE 'Bill%') OR (CITY LIKE 'Seattle%')) 
AND 
((COMPANY LIKE 'Bill%') OR (COMPANY LIKE 'Seattle%')) 

を、私はこのようなものを作ってみました。 私はessentialy(私は推測)

((COMPANY LIKE 'Bill%') OR (COMPANY LIKE 'Seattle%')) 

戻って何かしていない場合などのサブ状態が、私はその条件を無視する必要があるかどうかを判断する方法がある必要なもの。

Btw、私はMSSQL '05を使用しています。

答えて

12

まず、私はMSSQL上でどのように処理されたのかわかりませんが、フルテキスト検索を見たいと思うかもしれません。

一方、これはあなたが本当に何を意味するかのようになります。

SELECT * FROM ADDRESS WHERE 
((NAME LIKE 'Bill%') OR (CITY LIKE 'Bill%') OR (COMPANY LIKE 'Bill%')) 
AND 
((NAME LIKE 'Seattle%') OR (CITY LIKE 'Seattle%') OR (COMPANY LIKE 'Seattle%')) 
+0

ありがとう、今私は愚かな感じです、それは結局かなり明白でした。 –

+0

ようこそ。 =) –

4

フルテキストインデックス作成では、ContainsとConatainstableの両方を使用することができます。これは、必要な状況に非常に強力です。

+0

全文を出荷する必要があり、顧客のデータベースにアクセスできないため、全文検索が有効になっているかどうか確認できません。 –

0

あなたは非常によくこれをしたい場合は、それは非常に難しいだろう。理想的な世界では、プログラムは各キーワードを調べてその意味を判断し、一致する列を判断することができます。しかし、これには自然言語の認識といういくつかの工夫が必要です。

"Bill Seattle"の検索の例では、プログラムで人名の一部として「Bill」、都市名として「Seattle」を識別する必要があります。シンプルなことは、知られているすべての都市のリストを作成し、そこにキーワードを探すことです。見つかったら都市名としてマークしてください。あなたは会社のために同じことをすることができますし、都市や企業のように見えないキーワードのすべてを部分的な人名とみなします。この分類ビルドを使用すると、SQLクエリーは簡単に行うことができます。

しかし、私は上記のような単純なプロセスが壊れやすいと確信しています。だから、あなたがもっと知的な解析ソリューションを採用していなければ(OpenCalaisプロジェクトのアイデアでthe example parserをチェックしてください)、簡単な方法をお勧めします:

簡単な方法は、すべてのテキストフィールドに対して上記のようにテーブルを作成し、ランキングで結果を並べ替えることをお勧めします。これはおそらく80-20の良い解決策です。

関連する問題