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



我正在使用Oracle 11g Text,

作者表 :(作者详细信息表(AuthorId, AuthorName, AuthorDOB

文章表 : (文章内容表( 文章 ID、写入日期、发布日期ARTICLE_TXT (CLOB(

位置表 : (位置表( 位置ID, 位置状态, 位置城市

ArticleAuthorAssocTable: (Article-Author Association 的表( AuthorId, ArticleId

LocAuthorAssocTable:(作者-位置关联的表(AuthorId、LocationId、LocationStartDate、LocationEndDate

我的查询需要搜索ARTICLE_TXT上的任何输入搜索词以及发布日期/书面日期/作者DOB/位置城市/位置开始日期范围的任何其他查询。

由于我必须执行混合查询,因此我开始在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)

现在我的问题是:

  1. 是否可以创建复合域索引,并打开过滤器 来自不同表的列?
  2. 还有其他方法可以改进上述查询吗?

根据我的研究,一些选项使用物化视图、基于函数的索引USER_DATASTORE

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

谢谢

我认为解决此问题的最佳方法是在 ArticleTable 中添加一个 XML 列,您可以在其中组合文章的所有必需信息。

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

通过这种方式,您可以使用部分组(例如"PATH_SECTION_GROUP"(对此xml列进行索引并搜索非常具体的信息

最新更新