Текст Oracle содержит поиск по индексу с одним символом не работает - PullRequest
1 голос
/ 09 апреля 2019

У меня есть простая таблица index_search, созданная как:

BEGIN
 ctx_ddl.create_preference('my_pref', 'BASIC_WORDLIST');
 ctx_ddl.set_attribute('my_pref', 'SUBSTRING_INDEX', 'YES');
 ctx_ddl.set_attribute('my_pref', 'wildcard_maxterms', 0);
END;
/

CREATE TABLE my_index_search (search_tokens VARCHAR2(100));

CREATE INDEX my_index_search_ctx_idx01 ON
  my_index_search (
    search_tokens
  )
    INDEXTYPE IS ctxsys.context PARAMETERS ( 'Wordlist my_pref SYNC(ON COMMIT)' );

INSERT INTO my_index_search 
VALUES('A ABC/45/464587');

COMMIT;

Мой текстовый запрос использует оператор содержимого, и когда я ищу строку ' ABC / 45/464587 ', возвращается строка:

 SELECT *
   FROM my_index_search i
  WHERE contains ( search_tokens, '%ABC/45/464587%', 1 ) > 0;

Но когда я ищу строку ' A ABC / 45/464587 ', строка не выглядит так:

 SELECT *
   FROM my_index_search i
  WHERE contains ( search_tokens, '%A ABC/45/464587%', 1 ) > 0;

Почему, когда я добавляю в строку полного поиска, содержащую один символ (в данном случае 'A'), поиск не возвращает строку?

Заранее спасибо за любую помощь. Duncs

1 Ответ

0 голосов
/ 09 апреля 2019

Это потому, что 'A' является частью стоп-листа по умолчанию , поэтому Oracle Text не индексирует его.Вы не можете искать слова в стоп-листе.Если вы попробуете другое письмо, оно будет работать.

INSERT INTO my_index_search 
VALUES('B ABC/45/464587');
COMMIT;

SELECT *
   FROM my_index_search i
  WHERE contains ( search_tokens, '%B ABC/45/464587%', 1 ) > 0;

Подробнее .Вы можете установить пользовательский (пустой по умолчанию) стоп-лист при создании своего индекса контекста:

begin
ctx_ddl.create_stoplist('mystop', 'BASIC_STOPLIST');
ctx_ddl.add_stopword('mystop', 'The');
end;

и добавить к своему предпочтению создания индекса:

PARAMETERS ( 'Wordlist my_pref SYNC(ON COMMIT) Stoplist mystop' );

Вы также можете заменить стоп-листв существующем индексе, но вам придется его перестроить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...