|
|
|
Точный поиск с помощью Oracle Text (contains)
|
|||
|---|---|---|---|
|
#18+
Имеется 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2004, 17:59 |
|
||
|
Точный поиск с помощью Oracle Text (contains)
|
|||
|---|---|---|---|
|
#18+
UP. Хоть тема и старая, но актуальная. Возможно за 6 лет что-то новое появилось. У меня тот же вопрос как и у ТС. Пример он привел хороший. Можно ли как то через настройки индекса влиять на SCORE? Oracle 10.2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2010, 12:12 |
|
||
|
Точный поиск с помощью Oracle Text (contains)
|
|||
|---|---|---|---|
|
#18+
Кореец, Можно влиять на score через text query language. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2010, 12:15 |
|
||
|
Точный поиск с помощью Oracle Text (contains)
|
|||
|---|---|---|---|
|
#18+
-2-, А поподробнее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2010, 12:21 |
|
||
|
Точный поиск с помощью Oracle Text (contains)
|
|||
|---|---|---|---|
|
#18+
Кореец, 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2010, 12:25 |
|
||
|
Точный поиск с помощью Oracle Text (contains)
|
|||
|---|---|---|---|
|
#18+
На всякий случай поясню. 1. Язык используется английский. 2. Есть тезариус который устанавливает связи между фразами( только синонимы). Небольшой. 3. Все остальное по умолчанию. Проиндексированы строки БД. Там просто текст вида "AAA BBB". Никаких xml и т.п. Для поиска используется простой вариант вида contains(text,'AAA, SYN(BBB, tes)',1) > 0. Требуется чтобы в примере ТС, при поиск contains рейтинг строки "aa" был выше хотя бы рейтинга строки "bb aa cc". Оракл Текст вроде реализуется по алгоритму Салтона. По нему такой вот мусор получается на результат не влияет. Вот есть какая то возможность повлиять в этом случае на скоринг? Возможно в самом операторе contains есть какие то доп условия. Да там есть твозможность учитывать или нет порядок слов, также максим расстояние между поисковыми словами, но в данном случае в условии всего один поисковый термин. Для этого вариант я не нашел способов сделать поиск строже. Поделитесь опытом, если у кого такой был.)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2010, 12:32 |
|
||
|
Точный поиск с помощью Oracle Text (contains)
|
|||
|---|---|---|---|
|
#18+
-2-, Спасибо. (*) - судя по описанию это же как бы мультиплитактор термина. говорит о том сколько раз он должен встретится с документе? Но в данном случае в строках. "bb aa cc" "aa" "aa" встречается по одному разу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2010, 12:37 |
|
||
|
Точный поиск с помощью Oracle Text (contains)
|
|||
|---|---|---|---|
|
#18+
КореецТребуется чтобы в примере ТС, при поиск 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 . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2010, 13:24 |
|
||
|
Точный поиск с помощью Oracle Text (contains)
|
|||
|---|---|---|---|
|
#18+
-2-, Спасибо. Я правильно понял, что contains в связке с WITHIN приводит к тому, что рейтинг считается выше, чем выше отношение числа найденных терминов к общему числу терминов в строке? Но для этого нужно создать раздел в текством индексе. Раздел поиска я могу ведь просто задать общий на весь индекс. В реале там просто делить нечего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2010, 14:25 |
|
||
|
Точный поиск с помощью Oracle Text (contains)
|
|||
|---|---|---|---|
|
#18+
КореецЯ правильно понял, что contains в связке с WITHIN приводит к тому, что рейтинг считается выше, чем выше отношение числа найденных терминов к общему числу терминов в строке?Я понял также, хотя definescore не пользовал. В качестве секций при построении индекса можно попробовать притянуть понятия "предложение", "параграф". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2010, 14:45 |
|
||
|
Точный поиск с помощью Oracle Text (contains)
|
|||
|---|---|---|---|
|
#18+
-2-, DEFINESCORE появился только в Oracle 11. На нашей 10ке его нет. Жаль. А "предложение", "параграф" работают следующим образом. На примере SENTENCE - если у нас строки, которые проиндексированы оракл текстом, содержат точки(это считается разделителем предложений), то высший рейтинг получат те строки где в одном предложении встречаются все поисковые термины. Например есть две строки вида - IKS1. IKS2. - IKS1 and IKS2. при запросе Код: plaintext высший рейтинг получит вторая строка. Для нашей задачи это не подойдет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2010, 16:12 |
|
||
|
Точный поиск с помощью Oracle Text (contains)
|
|||
|---|---|---|---|
|
#18+
GRY, Код: plaintext Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2010, 19:02 |
|
||
|
Точный поиск с помощью Oracle Text (contains)
|
|||
|---|---|---|---|
|
#18+
потыкался , но или не понял или не нашел. Исх. данные: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. Необходимо, чтобы запрос Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Так же не должно ничего возвращаться. То есть только когда есть четкое соответствие: Код: plsql 1. 2. 3. 4. 5. орацел 11.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 15:32 |
|
||
|
Точный поиск с помощью Oracle Text (contains)
|
|||
|---|---|---|---|
|
#18+
Avotge, а что такое по вашему "чёткое соответствие" ? Хотите искать слова что-ли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2017, 18:06 |
|
||
|
Точный поиск с помощью Oracle Text (contains)
|
|||
|---|---|---|---|
|
#18+
Не догнала что такое по вашему "чёткое соответствие" ? Хотите искать слова что-ли? Верное уточнение, спасибо. То есть в поле содержатся слова (разделенные пробелом) в том числе и числа с точкой как в примере и надо находить именно целиком слова, не подхватывая вхождения внутри слов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2017, 10:17 |
|
||
|
Точный поиск с помощью Oracle Text (contains)
|
|||
|---|---|---|---|
|
#18+
Avotge, Надо поиграться с лексером и создавать индекс с этим лексером Точно не помню, даю ключевые слова для дальнейшего поиска: ctx_ddl.create_preference, ctx_ddl.set_attribute BASIC_LEXER и его атрибуты numjoin, numgroup ну и создание мндекса с параметрами create index ... indextype is ctxsys.context parameters('lexer ...') ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2017, 11:51 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39397015&tid=1886520]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
167ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 242ms |
| total: | 475ms |

| 0 / 0 |
