0

現在、ナレッジベースアプリを構築している最中であり、ドキュメント情報を保存してインデックスを作成するための最良の方法が少しわかりません。

ユーザーはドキュメントをアップロードします。その際、ドロップダウンリストからいくつかのオプション(カテゴリ、トピック、エリアなど、これらはすべて必須ではないことに注意してください)を選択し、いくつかのキーワードとドキュメントの説明も入力します。現時点では、選択されたカテゴリ(およびその他)は、カテゴリテーブルのIDを使用して、ドキュメントテーブルに外部キーとして保存されます。私たちができるようにしたいのは、ドキュメントが配置されているvarchar(max)列内の情報だけでなく、カテゴリ名、トピック名、エリア名などについてもFREETEXTTABLEまたはCONTAINSTABLEを実行することです。

インデックス付きビューを作成するオプションを検討しましたが、カテゴリ列に対するLEFT JOINが原因で、これは不可能でした。ですから、これを実行できるようにする方法がわかりません。どんなアイデアでも大歓迎です。

4

2 に答える 2

0

2 つの検索を一緒に AND したいと思います。たとえば、テキスト「foo」を含み、カテゴリが「Automotive Repair」のすべてのドキュメントを検索します。

おそらく、追加データを全文にする必要はなく、単に = などを使用できますか? 追加データがかなり小さい場合、全文の複雑さを保証できない場合があります。

ただし、両方でフル テキストを使用する場合は、結果をまとめて取得するストアド プロシージャを使用します。ここでの秘訣は、結果セットをすぐに返そうとするのではなく、結果をステージングすることです。

これは大まかな出発点です。

-- a staging table variable for the document results
declare @documentResults table (
    Id int,       
    Rank int
)

insert into @documentResults
select d.Id, results.[rank]
from containstable (documents, (text), '"foo*"') results
inner join documents d on results.[key] = d.Id

-- now you have all of the primary keys that match the search criteria
-- whittle this list down to only include keys that are in the correct categories

-- a staging table variable for each the metadata results
declare @categories table (
    Id int        
)

insert into @categories
select results.[KEY]
from containstable (Categories, (Category), '"Automotive Repair*"') results

declare @topics table (
    Id int        
)

insert into @topics
select results.[KEY]
from containstable (Topics, (Topic), '"Automotive Repair*"') results

declare @areas table (
    Id int        
)

insert into @areas
select results.[KEY]
from containstable (Areas, (Area), '"Automotive Repair*"') results


select d.text, c.category, t.topic, a.area
from @results r
inner join documents d on d.Id = r.Id
inner join @categories c on c.Id = d.CategoryId
inner join @topics t on t.Id = d.TopicId
inner join @areas a on a.Id = d.AreaId
于 2010-09-28T09:48:48.330 に答える
0

元のドキュメントと、メタデータとして追加されたカテゴリを含む全文インデックス用の新しい列を作成できます。次に、その列を検索すると、ドキュメントとカテゴリの両方が同時に検索されます。ドキュメント内でそれらを一意に保つタグ付けシステムを発明する必要がありますが、タグ自体が検索フレーズとして使用される可能性は低くなります。おそらく次のようなものです:

This is my regular document text. <FTCategory: Automotive Repair> <FTCategory: Transmissions>
于 2010-09-28T13:39:57.723 に答える