私はクライアントから、テキストを入力し、そのテキストフィールド内のすべての単語を検索するための検索フィールドを、顧客を含む複数のフルテキストインデックス付き列で検索するという要件があります情報を顧客情報テーブルから取得する。複数の検索語の複数の列
彼はFL Diana Brooks Miami 90210
を入力するので、例えば、彼はそれぞれにこれらの用語の全て(FL
、Diana
、Brooks
、Miami
、90210
は)国家、姓、姓、市や郵便番号の列にを検索することが望んでいます。
これは最初から悪い考えです。代わりに、この情報を別々に入力するために複数のフィールドを使用することを提案しました。それにもかかわらず、私が指摘しているところは、にはがありますが、パフォーマンスの観点から、なぜこれがうまくいかないのか、そして検索する用語を入力する複数のフィールドを持つ方が良いという概念の証明ができます。
私の質問に答えるために、パフォーマンスのベンチマークを得るためにクライアントが求めていることを行うフルテキストクエリを作成しようとしています。
私はこれまでのところ動作していないようですので、私は推測しますこれも可能かどうか尋ねていますか?
declare
@zip varchar(10) = 90210
, @lastName varchar(50) = 'Brooks'
, @firstName varchar(50) = 'Diana'
, @city varchar(50) = 'Miami'
, @state char(2) = 'FL'
, @searchTerm varchar(250) = ''
, @s varchar(1) = ' '
set @searchTerm = @state + ' ' + @firstName + ' ' + @lastName + ' ' + @city
select *
from freetexttable(contacts, (zip, lastName, FirstName, city, state), @searchTerm) ftTbl
inner join contacts c on ftTbl.[key] = c.ContactID
私は上記の持っているクエリが動作しているようですが、私が探していると私はそれを推測している(全体の多くを返しているだけ単一のレコードを見つけるために十分な制限ではありません私はFREETEXTTABLE
を使っているからです)。
私もCONTAINSTABLE
に置き換える試みたが、私はエラーが言ってます:の 'ダイアナ' 近く
メッセージ7630、レベル15、状態3、ライン26
構文エラーをフルテキスト検索条件 'FL Diana Brooks Miami'。通常の索引を使用して
私はこの問題を解決することができましたが、それはフルテキストと同じことを行うことも可能だ場合、私は興味があります。あなたがid
と連接列を持つビューWITH SCHEMABINDING
を作成することができます
WHERE C.FirstName like coalesce(@FirstName + '%' , C.FirstName)
AND C.LastName like coalesce(@LastName + '%' , C.LastName)
etc.
私は同様のアプローチをテストした後、私はちょうどあなたの答えを見つけました。私はすべての検索列を連結した新しい列を作成しました(私は知っています - 私はあなたの索引付けされたビューが好きです)、WHERE CONTAINS(searchColumn、@searchTerm)を使用していました。私が得る唯一の問題は、 '@ searchTerm'変数に' abc @ xyz.com'のような電子メールアドレスを含めると表示される電子メールアドレスであり、正しい行が返されません。 –