powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Точный поиск с помощью Oracle Text (contains)
16 сообщений из 16, страница 1 из 1
Точный поиск с помощью Oracle Text (contains)
    #32767372
GRY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GRY
Гость
Имеется Oracle 8.1.7:
SQL> desc gry_test;
Name Type Nullable Default Comments
---- ------------- -------- ------- --------
TEXT VARCHAR2(100) Y

SQL> select * from gry_test;

TEXT
-------------
bb aa cc
aa aa bb cc
aa
aa bb cc aa
aaa bbb
ccc
ccc aaa

7 rows selected

На таблице gry_test постоен доменный индекс по колонке text

SQL> select g.*, score(1) from gry_test g
2 where contains(text, 'aa', 1) > 0;

TEXT SCORE(1)
------------- ----------
aa aa bb cc 7
aa 4
aa bb cc aa 7
bb aa cc 4

Требуется отобрать только те строки из gry_test, которые _ТОЧНО_ совпадают с запросом - в данном случае 'aa'
Хочется обойтись без построения обычного индекса по полю text (т.к. в дальнейшем предполагается использование CLOB и RCO)

пока из идей есть:
1. Добавить в where:
and dbms_lob.getlength(text) = 'aa' (но тогда придется в поле text хранить уже нормализованные средствами RCO значения)
2. Мутить со склейкой таблицы gry_test и таблиц доменного индекса, с целью определения, что для заданной строки в таблице gry_test было проиндексированно _только_ одно слово 'aa'

Может быть есть какое-то более красивое решение?

С уважением, Илья
Код: plaintext
Код: plaintext
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Точный поиск с помощью Oracle Text (contains)
    #36799782
Кореец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UP.

Хоть тема и старая, но актуальная. Возможно за 6 лет что-то новое появилось.

У меня тот же вопрос как и у ТС. Пример он привел хороший.

Можно ли как то через настройки индекса влиять на SCORE?

Oracle 10.2.
...
Рейтинг: 0 / 0
Точный поиск с помощью Oracle Text (contains)
    #36799798
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кореец,

Можно влиять на score через text query language.
...
Рейтинг: 0 / 0
Точный поиск с помощью Oracle Text (contains)
    #36799816
Кореец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-,

А поподробнее?
...
Рейтинг: 0 / 0
Точный поиск с помощью Oracle Text (contains)
    #36799832
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кореец,

Oracle Text CONTAINS Query Operators weight (*)

The weight operator multiplies the score by the given factor, topping out at 100 when the score exceeds 100. For example, the query cat, dog*2 sums the score of cat with twice the score of dog, topping out at 100 when the score is greater than 100.
...
Рейтинг: 0 / 0
Точный поиск с помощью Oracle Text (contains)
    #36799856
Кореец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На всякий случай поясню.
1. Язык используется английский.
2. Есть тезариус который устанавливает связи между фразами( только синонимы). Небольшой.
3. Все остальное по умолчанию.

Проиндексированы строки БД. Там просто текст вида "AAA BBB". Никаких xml и т.п.
Для поиска используется простой вариант вида contains(text,'AAA, SYN(BBB, tes)',1) > 0.

Требуется чтобы в примере ТС, при поиск contains рейтинг строки "aa" был выше хотя бы рейтинга строки "bb aa cc".

Оракл Текст вроде реализуется по алгоритму Салтона. По нему такой вот мусор получается на результат не влияет. Вот есть какая то возможность повлиять в этом случае на скоринг?

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

Поделитесь опытом, если у кого такой был.))
...
Рейтинг: 0 / 0
Точный поиск с помощью Oracle Text (contains)
    #36799875
Кореец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-,

Спасибо. (*) - судя по описанию это же как бы мультиплитактор термина. говорит о том сколько раз он должен встретится с документе?

Но в данном случае в строках.
"bb aa cc"
"aa"

"aa" встречается по одному разу.
...
Рейтинг: 0 / 0
Точный поиск с помощью Oracle Text (contains)
    #36800023
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КореецТребуется чтобы в примере ТС, при поиск contains рейтинг строки "aa" был выше хотя бы рейтинга строки "bb aa cc".DEFINESCORE COMPLETION Score based on coverage. Documents will score higher if the ratio between the number of the matching terms and the number of all terms in the section (counting stop words) is higher. The COMPLETION scoring is only applicable when used with the WITHIN operator to search in zone sections .
...
Рейтинг: 0 / 0
Точный поиск с помощью Oracle Text (contains)
    #36800244
Кореец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-,

Спасибо. Я правильно понял, что contains в связке с WITHIN приводит к тому, что рейтинг считается выше, чем выше отношение числа найденных терминов к общему числу терминов в строке? Но для этого нужно создать раздел в текством индексе.
Раздел поиска я могу ведь просто задать общий на весь индекс. В реале там просто делить нечего.
...
Рейтинг: 0 / 0
Точный поиск с помощью Oracle Text (contains)
    #36800334
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КореецЯ правильно понял, что contains в связке с WITHIN приводит к тому, что рейтинг считается выше, чем выше отношение числа найденных терминов к общему числу терминов в строке?Я понял также, хотя definescore не пользовал. В качестве секций при построении индекса можно попробовать притянуть понятия "предложение", "параграф".
...
Рейтинг: 0 / 0
Точный поиск с помощью Oracle Text (contains)
    #36800744
Кореец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-,

DEFINESCORE появился только в Oracle 11. На нашей 10ке его нет. Жаль.

А "предложение", "параграф" работают следующим образом.

На примере SENTENCE - если у нас строки, которые проиндексированы оракл текстом, содержат точки(это считается разделителем предложений), то высший рейтинг получат те строки где в одном предложении встречаются все поисковые термины.

Например есть две строки вида
- IKS1. IKS2.
- IKS1 and IKS2.

при запросе
Код: plaintext
contains(field_txt,'(IKS and IKS2) WITHIN SENTENCE', 1 ) >  0 

высший рейтинг получит вторая строка.

Для нашей задачи это не подойдет.
...
Рейтинг: 0 / 0
Точный поиск с помощью Oracle Text (contains)
    #36803714
flop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GRY,
Код: plaintext
contains(text, 'aa-%',  1 ) >  0 
Кореец,
Код: plaintext
contains(text,'(AAA-%)*10, AAA, SYN(BBB, tes)', 1 ) >  0 
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Точный поиск с помощью Oracle Text (contains)
    #39396437
Avotge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
потыкался , но или не понял или не нашел.
Исх. данные:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE docs (f VARCHAR2(100));

INSERT INTO docs VALUES ('1.123 Mary had a little lamb');
INSERT INTO docs VALUES ('12.2.12 Twinkle, twinkle little star' );
INSERT INTO docs VALUES ('123.1 This Lamb is my lamb' );
INSERT INTO docs VALUES ('13.12.2 This Lamb is my lamb' );

CREATE INDEX docs_vc2doc_idx ON docs (f) INDEXTYPE IS ctxsys.context;


Необходимо, чтобы запрос
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SQL> SELECT * FROM docs WHERE contains(f, '12.2', 1) > 0;
F
--------------------------------------------------------------------------------
12.2.12 Twinkle, twinkle little starSRC]
Не возвращал строку, то есть чтобы искалось четкое соответствие 12.2, а не вхождения.
Аналогично, при поиске
[SRC oracle]SQL> SELECT * FROM docs WHERE contains(f, '123', 2) > 0
  2  /
F
--------------------------------------------------------------------------------
1.123 Mary had a little lamb
123.1 This Lamb is my lamb 


Так же не должно ничего возвращаться.
То есть только когда есть четкое соответствие:
Код: plsql
1.
2.
3.
4.
5.
SQL> SELECT * FROM docs WHERE contains(f, '123.1', 2) > 0
  2  /
F
--------------------------------------------------------------------------------
123.1 This Lamb is my lamb


орацел 11.2
...
Рейтинг: 0 / 0
Точный поиск с помощью Oracle Text (contains)
    #39396604
Не догнал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Avotge, а что такое по вашему "чёткое соответствие" ? Хотите искать слова что-ли?
...
Рейтинг: 0 / 0
Точный поиск с помощью Oracle Text (contains)
    #39397015
Avotge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не догнала что такое по вашему "чёткое соответствие" ? Хотите искать слова что-ли?
Верное уточнение, спасибо. То есть в поле содержатся слова (разделенные пробелом) в том числе и числа с точкой как в примере и надо находить именно целиком слова, не подхватывая вхождения внутри слов.
...
Рейтинг: 0 / 0
Точный поиск с помощью Oracle Text (contains)
    #39397101
cone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Avotge,

Надо поиграться с лексером и создавать индекс с этим лексером
Точно не помню, даю ключевые слова для дальнейшего поиска:
ctx_ddl.create_preference, ctx_ddl.set_attribute
BASIC_LEXER и его атрибуты numjoin, numgroup
ну и создание мндекса с параметрами
create index ... indextype is ctxsys.context parameters('lexer ...')
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Точный поиск с помощью Oracle Text (contains)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]