[Oracle] Fuzzy search
От: irq  
Дата: 08.05.15 08:58
Оценка:
Добрый день

возникла потребность реализации нечеткого поиска по нескольким полям таблицы. в связи с этим появился вопрос: каким образом реализовать нечеткий поиск по нескольким полям.

дано:
БД Oracle версии 11.2.0.4
таблицы Клиент(ФИО, ДопИнформация) и Стоплист(ФИО)

необходимо:
при заведении клиента проверить нет ли такого человека в таблице Стоплист. при этом надо учесть что оператор может ошибиться и вбить неправильно ФИО (напр.: Иванов — Ивонов, но чаще казусы случаются с ФИО иностранных граждан Мухамед — Мухамет — Мухамбет — Муххамед — и тд). при нахождении вывести список совпадений для того чтобы оператор мог визуально сверить и принять решение о вводе данного клиента в таблицу.


у Oracle есть несколько вариантов реализации

1 проидексировать поле CTXSYS.CONTEXT и потом строить запросы. но у нас стоит версия БД 11.2.0.4 в которой AUTO_LEXER отключен. может ли решить вопрос поднятие БД версии 12с и настройки db link между ними только для проверки схожести?
2 или воспользоватся процедурой UTL_MATCH.EDIT_DISTANCE?
3 может есть другой вариант?
Re: [Oracle] Fuzzy search
От: wildwind Россия  
Дата: 08.05.15 11:07
Оценка: 2 (1)
Здравствуйте, irq, Вы писали:

irq> 1 проидексировать поле CTXSYS.CONTEXT и потом строить запросы.


CTXSYS.CONTEXT это не нечеткий поиск. Это полнотекстовый поиск для естественного языка. Это две большие разницы.

irq> 2 или воспользоватся процедурой UTL_MATCH.EDIT_DISTANCE?


Это можно.

irq> 3 может есть другой вариант?


Приведение ФИО к некоторому каноническому представлению и поиск по нему. То есть SOUNDEX и его аналоги для русского языка. Помню, попадались даже реализации на PL/SQL.

С версии 11.2 есть некоторая поддержка нечеткого поиска имен для немецкого, датского и шведского языков (оператор NDATA). Появилась ли в 12 версии поддержка русского — не знаю, но думаю что нет.

Есть также сторонние коммерческие решения для полнотекстового поиска для русского языка. В них скорее всего реализован и нечеткий поиск по именам.
avalon/1.0.442
Re[2]: [Oracle] Fuzzy search
От: irq  
Дата: 11.05.15 10:00
Оценка:
Здравствуйте, wildwind, Вы писали:

W>Здравствуйте, irq, Вы писали:


irq>> 1 проидексировать поле CTXSYS.CONTEXT и потом строить запросы.


W>CTXSYS.CONTEXT это не нечеткий поиск. Это полнотекстовый поиск для естественного языка. Это две большие разницы.


правильно ли я вас понял: полнотекстовый поиск это поиск с учетом морфологии языка (то есть слово идти найдется по следующим словам — шел, пришел, ушел и тд)?
Re[3]: [Oracle] Fuzzy search
От: wildwind Россия  
Дата: 11.05.15 16:37
Оценка:
Здравствуйте, irq, Вы писали:

irq> правильно ли я вас понял: полнотекстовый поиск это поиск с учетом морфологии языка (то есть слово идти найдется по следующим словам — шел, пришел, ушел и тд)?


В общем да. А в этом примере не уверен, что найдется сразу. Думаю, эти слова нужно вносить в словарь синонимов (тезаурус).
avalon/1.0.442
Re[4]: [Oracle] Fuzzy search
От: MasterZiv СССР  
Дата: 14.05.15 16:56
Оценка:
Здравствуйте, wildwind, Вы писали:

W>Здравствуйте, irq, Вы писали:


irq>> правильно ли я вас понял: полнотекстовый поиск это поиск с учетом морфологии языка (то есть слово идти найдется по следующим словам — шел, пришел, ушел и тд)?


W>В общем да. А в этом примере не уверен, что найдется сразу. Думаю, эти слова нужно вносить в словарь синонимов (тезаурус).


Вообще-то это далеко не синонимы.
Re[5]: [Oracle] Fuzzy search
От: wildwind Россия  
Дата: 14.05.15 18:32
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ> Вообще-то это далеко не синонимы.


Вообще-то да, не синонимы.
avalon/1.0.442
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.