1

SQL Server 2008 sprocに入力するキーワードのリストを使用してテキスト関連性関数を作成し、テーブル行のリストを返すフリーテキスト検索を実行する必要があります。

行ごとに、「ParseForKeywords(result、listOfKeywords)AS Parsed Result」などの関数を使用して、結果フィールドに基づいて新しい文字列を作成します。

listOfkeywordsは、コンマまたはスペースで区切られた単語のリストになります。

結果がたとえば100語よりも大きい場合は、次の手順を実行します。キーワードのいずれかの最初の出現を検索し、5または6語を減算し、そこから結果文字列の長さの新しい文字列を開始します。

結果が200語より大きい場合は、上記と同じように、次の50語について、キーワードの次の出現箇所から5または6語を引いたものを見つけ、「...」を追加します。

私が探しているのは出発点であり、このロジックを最適な場所に配置するためのアドバイスです。SQLServerで、またはDataTableセルにデータを入力するときに.Netコードにこれを実行させますか?

TSQL関数でこれを行う場合:まず、カーソルまたはCTEを作成して、コンマで区切られた単語のリストをループします。各パスで。いずれかの単語の最初の出現を見つけるには、キーワードの数をループして、最小のCHARINDEX()値を見つける必要があります。

WHERE IN('word1'、'word2'、'word3')を実行する方法はありますか?

これが見つかったら、たとえば4スペースを数えるまで、そのcharindex値からx個の文字を減算します。また、これらの単語のいずれかがテキストの後半で発生するかどうかを確認する必要があります。その時点で、プロセス全体が繰り返されます。

これを今見ると、少なくとも2つの機能が必要になります。

ありがとう。

4

3 に答える 3

1

このようなタスクに最適なのは、CLRストアドプロシージャを作成することです。インターネット上にはたくさんの例とガイドがあります。

于 2011-06-08T16:07:09.240 に答える
1

オプション1:クエリの実行後に呼び出すコードにこのロジックを配置します。ParseForKeywords値を含む結果に新しい列を追加します。

これはより単純な実装ですが、ParseForKeywordsがすべての結果に対して実行されるため、結果をページングしている場合はパフォーマンスが低下します。

オプション2: CLR関数を作成し、クエリでParseForKeywordsを実行します。

これにより、アーキテクチャが少し複雑になる可能性がありますが、結果をページングするときにパフォーマンスが大幅に向上します。

于 2011-06-08T16:18:52.053 に答える
0

フルテキストインデックスを使用していない限り、SQLは実際にはキーワードのテキストを解析するのに非常に悪い場所です。ここに良い概要があります:

http://www.simple-talk.com/sql/learn-sql-server/understanding-full-text-indexing-in-sql-server/

フルテキストインデックスを作成しないと、クエリは検索するすべての文字列を線形に解析する必要があり、特に検索する行が多い場合、これは非常に遅い操作になる可能性があります。

もう1つのオプションは、luceneのようなパッケージを使用して、データベースの外部で全文検索を実行することです。

于 2011-06-08T16:29:48.477 に答える