Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Oracle Text: найти символ '*'  [new]
Denis Popov
Member

Откуда: Санкт-Петербург
Сообщений: 7862
Oracle 10.1.0.4

create table test (
    test_id number(9)
  , value clob
  , constraint pk_test primary key (test_id)
);

insert into test (test_id, value) values (1, 'abcd * efgh');
insert into test (test_id, value) values (2, 'abcd efgh');

create index ixd_test_value on test (value)
indextype is ctxsys.context;

Можно ли составить шаблон для CONTAINS, чтобы найти записи, содержащие символ '*'? Через \* и {*} не получилось.
25 май 05, 15:10    [1570376]     Ответить | Цитировать Сообщить модератору
 Re: Oracle Text: найти символ '*'  [new]
Denis Popov
Member

Откуда: Санкт-Петербург
Сообщений: 7862
Нашел вроде: %{*}, но на реальных данных идет:

ORA-29902: error in executing ODCIIndexStart() routine
ORA-20000: Oracle Text error:
DRG-51030: wildcard query expansion resulted in too many terms
25 май 05, 15:41    [1570482]     Ответить | Цитировать Сообщить модератору
 Re: Oracle Text: найти символ '*'  [new]
flop
Member

Откуда:
Сообщений: 76
Denis Popov
Oracle 10.1.0.4

create table test (
    test_id number(9)
  , value clob
  , constraint pk_test primary key (test_id)
);

insert into test (test_id, value) values (1, 'abcd * efgh');
insert into test (test_id, value) values (2, 'abcd efgh');

create index ixd_test_value on test (value)
indextype is ctxsys.context;

Можно ли составить шаблон для CONTAINS, чтобы найти записи, содержащие символ '*'? Через \* и {*} не получилось.


Если посмотреть в табличку индекса DR$IDX_TEST_VALUE$I, то там символа зведочки нет. Следовательно CONTAINS не найдет ничего.
Можно сделать так
begin
ctx_ddl.create_preference('MY_LEXER','BASIC_LEXER');
ctx_ddl.set_attribute('MY_LEXER','printjoins','*');
end;
/
create index ixd_test_value on test (value)
indextype is ctxsys.context parameters('LEXER MY_LEXER');

SELECT * FROM test WHERE contains(value,'\*')>0;
25 май 05, 17:18    [1570748]     Ответить | Цитировать Сообщить модератору
 Re: Oracle Text: найти символ '*'  [new]
Denis Popov
Member

Откуда: Санкт-Петербург
Сообщений: 7862
Да, спасибо, работает, ключевым оказалось слово printjoins
25 май 05, 18:35    [1570955]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Oracle Text: найти символ '*'  [new]
Parovozik
Member

Откуда:
Сообщений: 38
[quot flop]
Denis Popov
Oracle 10.1.0.4
Можно сделать так
begin
ctx_ddl.create_preference('MY_LEXER','BASIC_LEXER');
ctx_ddl.set_attribute('MY_LEXER','printjoins','*');
end;
/
create index ixd_test_value on test (value)
indextype is ctxsys.context parameters('LEXER MY_LEXER');

SELECT * FROM test WHERE contains(value,'\*')>0;

В Oracle Text я пока ноль. Поначалу contains искал только символы алфавита, на все остальные знаки реагировал ошибкой ORA-29902. С помощью кода, предлагаемого Denis Popov (вместо * я ставил весь набор спец. символов без пробелов, потом пробовал и с пробелами) я таки заставил Oracle Text искать некоторые символы, например, ".", ":" и др. На все остальные по-прежнему реагирует ошибкой. Не подскажете как поправить?
9 авг 11, 10:35    [11089630]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить