Как создать инвертированный индекс для таблицы с помощью Oracle - PullRequest
1 голос
/ 28 марта 2011

У меня есть таблица с именем book с колонками ISBN, Title и Description. Я пытался создать инвертированный индекс для этой таблицы с помощью команды:

CREATE INDEX myindex ON book(description) INDEXTYPE IS CTXSYS.CONTEXT;

и я пытался запросить его с помощью запроса ниже:

  SELECT score(1), title 
    FROM book b
   WHERE CONTAINS(b.description, 'Huckleberry Finn', 1) > 0 
ORDER BY score(1) DESC;

Всякий раз, когда я запускаю этот запрос, строки не выбираются, даже если запрос

SELECT title, description
  FROM book
 WHERE description = 'Huckleberry Finn';

возвращается:

Title          description
------------------------------------
'Huckleberry'  'Huckleberry Finn'

Я не уверен, что не так с моими запросами, это первый раз, когда я пытался создать инвертированный индекс, так что если кто-нибудь может сказать мне, что не так с моим запросом, или другой способ сделать это, Я был бы очень признателен.

1 Ответ

7 голосов
/ 28 марта 2011

Синхронизировали ли вы свой индекс? В более новых версиях вы можете создать свой индекс так, чтобы он обновлялся при фиксации. В противном случае вы можете полагаться на ручную синхронизацию.

Не думайте, что индекс можно синхронизировать внутри транзакции.

create index search_idx
  on ctx_demo (text)
  indextype is ctxsys.context
  parameters ('sync (on commit)')
/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...