1

これは、SQL のフルテキスト インデックスからの奇妙な動作のようです。

FTI は「NN」プレフィックスを付けてインデックスに番号を格納するため、「123」は「NN123」として保存されます。

ユーザーが N で始まる単語 (つまり "n*" を含む) を検索すると、すべての数字も取得されます。

そう:

select [TextField]
from [MyTable] 
where contains([TextField], '"n*"') 

戻り値:

MyTable.TextField
--------------------------------------------------
このテキストには、ナビゲーターという単語が含まれています
このテキストいいですね
このテキストには 123 しかなく、返されるべきではありません

その最後の行を除外する良い方法はありますか? これに対する一貫した回避策はありますか?


これらの追加の "" は、ワイルドカード トークンを機能させるために必要です。

select [TextField] from [MyTable] where contains([TextField], 'n*')

リテラル n* を検索しますが、何もありません。

--return rows with the word text
select [TextField] from [MyTable] where contains([TextField], 'text')

--return rows with the word tex*
select [TextField] from [MyTable] where contains([TextField], 'tex*')

--return rows with words that begin tex...
select [TextField] from [MyTable] where contains([TextField], '"tex*"')
4

1 に答える 1

1

これを処理するにはいくつかの方法がありますが、どちらもそれほど素晴らしいものではありません。

まず、それTextFieldが実際に数値であることを示す列をテーブルに追加します。それを実行してフィルタリングできれば、最もパフォーマンスの高いバージョンが得られます。

それができない場合は、さらにフィルターを追加する必要があります。広範囲にテストしていませんが、フィルターを追加できますAND TextField NOT LIKE 'NN%[0-9]%'

欠点は、これにより「NN12NOO」が除外されることですが、これはデータによって表されない特殊なケースである可能性があります。

于 2008-09-12T02:27:56.017 に答える