Oracle 11g文本:复合域索引-根据不同表中的列进行筛选

Oracle 11g文本:复合域索引-根据不同表中的列进行筛选,oracle,indexing,dns,composite,oracle-text,Oracle,Indexing,Dns,Composite,Oracle Text,我使用的是Oracle 11g文本 可编写的:(作者详细信息表) AuthorId、AuthorName、AuthorDOB ArticleTable:(文章内容表)ArticleId、WriteDate、PublishDate、Article_TXT(CLOB) LocationTable:(位置表)LocationId、LocationState、LocationCity ArticleAuthorAsActable:(文章作者关联表)作者,文章ID LocationAuthorAssect

我使用的是Oracle 11g文本

可编写的:(作者详细信息表) AuthorId、AuthorName、AuthorDOB

ArticleTable:(文章内容表)ArticleId、WriteDate、PublishDate、Article_TXT(CLOB)

LocationTable:(位置表)LocationId、LocationState、LocationCity

ArticleAuthorAsActable:(文章作者关联表)作者,文章ID

LocationAuthorAssectable:(作者位置关联表)Authority、LocationId、LocationStartDate、LocationEndDate

我的查询需要搜索文章\u TXT上的任何输入搜索词,以及PublishDate/WriteDate/AuthorDOB/LocationCity/LocationStartDate range上的任何其他查询

由于必须进行混合查询,我开始在ArticleTable上创建复合域索引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)
现在我的问题是:

  • 是否可以通过启用“筛选条件”来创建复合域索引 来自不同表的列
  • 有没有其他方法可以改进上述查询
  • 根据我的研究,一些选项是使用物化视图、基于函数的索引、用户数据存储

    但不幸的是仍然不知道如何使用它们。。。请用你的知识帮助我


    谢谢

    我认为解决这个问题的最好办法是在ArticleTable中添加一个XML列,您可以在其中合并文章的所有必需信息

    然后,您需要向相关的表中添加触发器,以便在发生数据更改时重新创建此xml


    通过这种方式,您可以索引此xml列并使用节组(例如“PATH\u section\u GROUP”)搜索非常特定的信息。

    我认为解决此问题的最佳方法是向ArticleTable中添加一个xml列,在该列中合并文章的所有必需信息

    然后,您需要向相关的表中添加触发器,以便在发生数据更改时重新创建此xml

    通过这种方式,您可以为这个xml列编制索引,并使用节组(例如“PATH\u section\u GROUP”)搜索非常特定的信息