2012-05-09 5 views
2

Я использую Oracle 11g Text,Oracle 11g Текст: Composite Index Домен - FILTER BY на колоннах из разных таблиц

AuthorTable: (таблица подробно автора) AuthorID, AUTHORNAME, AuthorDOB

ArticleTable: (таблица для статьи контента) ArticleID, WrittenDate, PublishDate, ARTICLE_TXT (CLOB)

LocationTable: (таблица для размещения) LocationId, LocationState, LocationCity

ArticleAuthorAssocTable: (таблица для статьи авторов ассоциации) AuthorID, ArticleID

LocAuthorAssocTable: (таблица для Автор-Location Ассоциации) AuthorID, LocationId, LocationStartDate, LocationEndDate

В моем запросе необходимо выполнить поиск любого входного условия поиска по ARTICLE_TXT вместе с любым другим запросом в диапазоне PublishDate/WrittenDate/AuthorDOB/LocationCity/LocationStartDate.

Как я должен выполнить смешанный запрос, я начал создавать CDI с индексом составного домена на ArticleTable.

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. Можно ли создать индекс домена Composite с FILTER BY на столбцов из разных таблиц?
  2. Есть ли другой способ улучшить вышеуказанный запрос?

Из моих исследований, некоторые варианты с использованием материализованных представлений, функции на основе индекса, USER_DATASTORE

Но, к сожалению, до сих пор не знаете, как использовать их ... Пожалуйста, помогите мне с вашего ведома.

Благодаря

ответ

0

Я думаю, что лучшим решением этой проблемы является добавление столбца XML в ArticleTable, где объединить все необходимые данные статьи.

Затем вам нужно добавить триггеры к вовлеченным таблицам, чтобы воссоздать этот xml, когда происходят изменения данных.

Таким образом, вы можете индексировать этот столбец xml и искать очень конкретную информацию, используя группы разделов (например, как «PATH_SECTION_GROUP»)