2

私は新しいアプリケーションで「グーグル風」の検索メカニズムを作成する任務を負っていますが、SQLサーバーデータベースで実際の検索を実行することを目的としたストアドプロシージャで少し壁にぶつかりました。

基本的に、プロシージャはユーザー入力から取得した文字列で渡され、次の置換を使用してcontainsステートメントに解析されます。

SELECT @SearchString = '"'+ REPLACE(REPLACE(@SearchKeyword,'"',''), ' ', '" AND "') +'"'

@SearchKeyword変数にストップワードが含まれていない限り、これはうまく機能します。ストップワードが含まれている場合、チェーンされたANDステートメントの一部としてこれを含めると、結果が見つからないバグが発生します。

(たとえば、「Something Somewhere」を使用してユーザーを検索すると、正しい結果セットが返されますが、Something of Somewhereは、全文索引カタログに含まれていないため、何も返されません)。

ストップリストからすべてのエントリを削除するというnuke-from-orbitアプローチを採用できることはわかっていますが、理想的には、ストップリストに含まれるステートメントワードにチェーンされないように元の置換を変更するだけです。

残念ながら、これは私の知識の不規則な端に私を連れて行き、私はこの情報を置き換えの目的で利用するためにどこからこの情報を引き出すのかを見つけることができません。

私は正しい方向に進んでいますか、それとも(厄介な間)ストップリストを削除することが最善の解決策として役立ちますか?

4

2 に答える 2

4

これに対する答えが見つかったので、参照用にここに残しておきます。

テキストをsys.dm_fts_parserに渡すことにより、入力からのどの単語がデフォルトのストップワードであるかを識別できます。

DECLARE @Keywords VARCHAR(200)
SET @Keywords = '"Web Designer"'

SELECT * 
FROM sys.dm_fts_parser(@Keywords, 1033, 0, 0) 
WHERE special_term <> 'Noise Word' AND display_term IS NOT NULL
于 2012-08-15T12:40:48.730 に答える
0

すべてのストップワードを手動で削除しますが、それが機能する最善の解決策ではありません!

于 2012-07-06T13:46:28.720 に答える