我使用的是Oracle 11g Text,
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上创建复合域索引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)
现在我的问题是:
根据我的研究,一些选项使用物化视图,基于函数的索引,USER_DATASTORE
但不幸的是仍然不确定如何使用它们......请帮助我了解你的知识。
由于
答案 0 :(得分:0)
我认为此问题的最佳解决方案是在ArticleTable中添加XML列,您可以在其中组合文章的所有必需信息。
然后,您需要在涉及的表中添加触发器,以便在发生数据更改时重新创建此xml。
通过这种方式,您可以索引此xml列并使用节组搜索非常具体的信息(例如'PATH_SECTION_GROUP')