powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / И снова нечеткий поиск
2 сообщений из 2, страница 1 из 1
И снова нечеткий поиск
    #39335529
4etkiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть varchar2-поле назовем его sfield, его значения фиск. длины 20 символов, состоят из цифр и букв латиницы.
Задача быстро искать по данному полю записи (обычно не более 20 из десятков млн),
но делать это с учетом возможной ошибки в одном символе при наборе.
Самый простой вариант вижу так:
1. два индекса:
Код: plsql
1.
2.
     ...on mytable(sfield);
     ...on mytable(reverse(sfield));


2. поиск:
Код: plsql
1.
2.
3.
4.
5.
   select t.* 
     from mytable t
    where (sfield like substr(:search_value, 1, 10) || '%' 
        OR reverse(sfield) like substr(reverse(:search_value), 1, 10) || '%')
      and utl_match.edit_distance(sfield, :search_value) < 3


Вообще нужна бы дистанция 1, включая перестановку символов местами,
но т.к. в стандартной ф-ции перестановка дает уже дистанцию 2, поэтому так.
И при такой записи велика вероятность, что оптимизатор выберет фулскан таблицы вместо использования двух индексов.
Поэтому возможно, надо писать что-то типа (просто суть):
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select distinct t.*
  from 
   (select t.* 
     from mytable t
    where sfield like substr(:search_value, 1, 10) || '%' 
      and utl_match.edit_distance(sfield, :search_value) < 3
    union all
   select t.* 
     from mytable t
    where reverse(sfield) like substr(reverse(:search_value), 1, 10) || '%' 
      and utl_match.edit_distance(sfield, :search_value) < 3) t


Вопрос в том, есть ли варианты лучше как с тз удобства сопровождения и простоты реализации так и с тз эффективности поиска?
В частности реализуемо ли с помощью Oracle Text?
...
Рейтинг: 0 / 0
И снова нечеткий поиск
    #39335586
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4etkiy,

sfield in (720 значений из :search_value)
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / И снова нечеткий поиск
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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