Текстовый поиск Oracle Fuzzy [закрыт]

Как можно выполнить поиск по нечеткому имени в Oracle?

Например:

Наша система данных имеет предпочтительную рассылку как:

Г-н. Николас Джим Рэли

Но в Facebook или другом поле поиска алгоритму передается имя:

Ник Джим Роли

Процесс выполнит поисковое имя по всем предпочитаемым именам, а затем вернет результат, содержащий наиболее подходящие символы:

Мистер [Ник]олас Джим Рэли

[Ник]k Джим Роли

16 из 17 символов моего искомого имени появляются в предпочтительном имени, и мы могли бы вернуть ранжированное предложение.

[ОТРЕДАКТИРОВАНО ДОБАВИТЬ]

После первоначального предложения и прочтения параметров текстового запроса Oracle Я создал индекс в таблице

create index ADD_EX_INDX3 on address_extract(pref_mail_name) 
  indextype is ctxsys.context 
  parameters ('DATASTORE CTXSYS.DEFAULT_DATASTORE');

и теперь я могу успешно уйти в отставку

select score(1), ae.pref_mail_name
from address_extract ae
 where contains(pref_mail_name,'fuzzy(raleigh,,,weight)',1) > 0
order by score(1) desck

Что возвращает

100 Mr. Raleigh H. Jameson
100 Mr. Nicolas Jim Raleigh
100 Ms. Susanne M. Raleigh
66  Mrs. LaReign Smith
66  Ms. Rahil Smith
62  Mr. Smith  Ragalie

Однако я изо всех сил пытаюсь выполнить поиск по полному имени. Как мне сделать полное имя?


person Lloyd    schedule 11.01.2013    source источник
comment
Это выглядит так, как будто вы не приложили никаких усилий для себя. Поиск оракула по нечеткому тексту сразу дал результат содержит, а второй указывает на более общий обзор; ссылка в документах представляет собой описание индекса ctxcat, который вам понадобится. Вы пробовали что-нибудь из этого? Какие проблемы у вас возникли при этом?   -  person Ben    schedule 11.01.2013
comment
Спасибо за быстрый ответ. Мое понимание содержит то, что мой пример не будет работать. Поскольку «Ник Бэлком Рэли» не содержится в «Николас Бэлком Рэли». Вы правы, я, возможно, не понял вопроса, который мне нужно было задать. Я делаю успехи в изучении «формулы расстояния Левенштейна».   -  person Lloyd    schedule 11.01.2013
comment
Я не решаюсь спросить после вашего первого снисходительного ответа, но я действительно изо всех сил пытаюсь заставить нечеткий поиск работать с несколькими терминами. Я собираюсь уточнить редактировать свой вопрос и посмотреть, смогу ли я получить некоторые указатели.   -  person Lloyd    schedule 11.01.2013
comment
Привет, Ллойд, извини, если я показался снисходительным; это не было преднамеренным. Я торопился вывалить в комментарий как можно больше информации. Я хотел указать, насколько важно попробовать самостоятельно; это мешает пользователям дублировать ваши собственные усилия и побуждает людей помогать. Я вернулся, чтобы указать вам на UTL_MATCH и Яро Винклера, но я вижу, что @APC уже сделал это. Проблема с ними в индексах... На самом деле у меня есть два предложения. Один из них — создать список псевдонимов, например, от Ника до Николая, а затем вы можете искать оба.   -  person Ben    schedule 12.01.2013
comment
Во-вторых, посмотрите на Люцерн и Солра, хотя они могут быть совершенно бессмысленными с вашей точки зрения, это зависит от того, что именно вы делаете.   -  person Ben    schedule 12.01.2013


Ответы (1)


Сопоставление имен сложно. Индексация текста в Oracle поддерживает нечеткое сопоставление и выделение корней, что является началом, но рассмотрим следующие имена:

  • Николас Рэли
  • Николас Рэли
  • Нико Рэли
  • Ник Рэли
  • Ники Рэли
  • Ник Рэли
  • Николаус Рэли
  • Никола Рэли
  • Никки Рэли
  • Никола Рэли
  • Николай Рэли
  • Николай Рэли

Попытка сопоставить их с помощью абстракций, будь то расстояние Левенштейна или двойной метафон, приведет к ложным срабатываниям и ложным отрицаниям. Такова природа абстракции. Лучший способ получить сфокусированный и точный набор результатов — использовать тезаурус (и даже он не идеален). К сожалению, создание всеобъемлющего тезауруса имен — гигантская задача; чтобы получить представление о задаче, проверьте статистику на сайте NameX.


Обновление: Oracle 11gR2 включает расширение Oracle Text, предназначенное для поиска по имени. Это очень аккуратно и, безусловно, первое место для начала. Подробнее.

person APC    schedule 11.01.2013