2012-05-09 14 views
2

から列にすることにより、フィルタ、Oracle 11gのテキスト:コンポジット・ドメイン索引 - 私はOracle 11gのテキストを使用しています異なるテーブル

AuthorTable:(著者の詳細については、表) AuthorId、AUTHORNAME、AuthorDOB

ArticleTable:(文書コンテンツのテーブル)情報でarticleID、WrittenDate、PublishDate、ARTICLE_TXT(CLOB)

LocationTable:(ロケーション用テーブル)LocationId、 LocationState、LocationCity

ArticleAuthorAssocTable:AuthorId(条-者協会のテーブル)、情報でarticleID

LocAuthorAssocTable:(著 - ロケーション協会のテーブル)AuthorId、LocationId、LocationStartDate、LocationEndDate

私のクエリは、ARTICLE_TXTの入力検索語を、PublishDate/WrittenDate/AuthorDOB/LocationCity/LocationStartDateの範囲の他のクエリと一緒に検索する必要があります。

私は混合クエリを実行する必要があるため、ArticleTableでComposite Domain Index CDIを作成しました。

CREATE INDEX ARTICLE_TXT_CDI_IDX ON ArticleTable(ARTICLE_TXT) 
    INDEXTYPE IS ctxsys.CONTEXT 
    FILTER BY WrittenDate, PublishDate 

SELECT 

/*+ domain_index_sort domain_index_filter(ARTICLE_TXT_CDI_IDX) */  article.ARTICLE_TXT, 

author.AuthorName , article.WrittenDate, article.PublishDate, LocationTable.LocationCity ,location.LocationStartDate, location.LocationEndDate 

FROM 

    ArticleTable article 

    INNER JOIN 
    ArticleAuthorAssocTable articleAuthorAssoc ON article.articleId = articleAuthorAssoc .articleId 

    INNER JOIN 
    AuthorTable author ON author.authorId= articleAuthorAssoc.authorId 

    INNER JOIN 
    LocAuthorAssocTable locAuthorAssoc req ON author.authorId = locAuthorAssoc.authorId 

INNER JOIN 
    LocationTable location ON location .authorId = locAuthorAssoc.authorId 

WHERE 

CONTAINS(article.ARTICLE_TXT, 'Something') >0 

AND author.AuthorDOB BETWEEN TO_DATE('01/01/2001','MM/DD/YYYY') 
AND TO_DATE('12/31/2012','MM/DD/YYYY') 

AND location.LocationId IN (1,2) 

としてクエリは、今私の質問は以下のとおりです。

  1. それは別のテーブルから 列にすることにより、フィルタを備えた複合ドメイン索引を作成することは可能ですか?
  2. 上記のクエリを改善する他の方法はありますか?私の研究から

は、いくつかのオプションは、残念ながらまだ...あなたの知識で私を助けてください、それらを使用する方法がわからない

USER_DATASTORE

、ビュー、ファンクション索引をマテリアライズドしかし、使用しています。

おかげ

答えて

0

私は、この問題に対する最善の解決策は、あなたが記事のすべての必要な情報を組み合わせArticleTableにXML列を追加することだと思います。

次に、データが変更されたときに、このxmlを再作成するために、関連するテーブルにトリガーを追加する必要があります。

このようにして、このxml列にインデックスを作成し、セクショングループ(例: 'PATH_SECTION_GROUP')を使用して非常に特定の情報を検索することができます