0

如何在 Oracle 中进行模糊名称搜索?

例如:

我们的数据系统具有以下首选邮件:

Nicolas Jim Raleigh 先生

但在 Facebook 或其他搜索字段中,传递给算法的名称是:

尼克·吉姆·罗利

该过程将对所有首选名称运行搜索名称,然后返回包含最匹配字符的结果:

[ Nic ]olas Jim Raleigh先生

[尼克]k吉姆罗利

我搜索的名称的 17 个字符中有 16 个出现在首选名称中,我们可以返回排名建议。

[编辑添加]

在最初的建议和阅读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

但是,我正在努力进行全名搜索。我将如何去做全名?

4

1 回答 1

5

名字匹配很难。Oracle 的文本索引支持模糊匹配和词干提取,这是一个开始,但请考虑以下名称:

  • 尼古拉斯·罗利
  • 尼古拉斯·罗利
  • 尼科·罗利
  • 尼克·罗利
  • 尼基·罗利
  • 尼克·罗利
  • 尼古拉斯·罗利
  • 尼古拉·罗利
  • 尼基·罗利
  • 尼古拉·罗利
  • 尼古拉·罗利
  • 尼古拉·罗利

试图通过抽象来匹配它们,无论是 Levenshtein Distance 还是 Double Metaphone,都会产生误报和漏报。这就是抽象的本质。获得集中且准确的结果集的最佳方法是使用同义词库(即使这并不完美)。不幸的是,组装一个全面的名称词典是一项艰巨的任务。要了解这项任务,请查看NameX 网站上的统计数据


更新:Oracle 11gR2 包括针对名称搜索定制的 Oracle Text 扩展。这是非常整洁的,绝对是第一个开始的地方。 了解更多

于 2013-01-11T23:50:32.733 回答