Oracle模糊文本搜索

时间:2013-01-11 17:08:24

标签: oracle plsql full-text-search names

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

例如:

我们的数据系统首选邮件为:

先生。 Nicolas Jim Raleigh

但是在Facebook或其他搜索领域,传递给算法的名称是:

Nick Jim Raleigh

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

先生。 [ Nic ] olas Jim Raleigh

[ Nic ] k Jim Raleigh

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

[已加入编辑]

在初步建议和阅读Oracle's Text Query options之后,我在表格上创建了​​一个索引

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

然而,我正在努力进行全名搜索。我怎么去做全名?

1 个答案:

答案 0 :(得分:5)

名称匹配 hard 。 Oracle的Text索引支持模糊匹配和词干,这是一个开始,但请考虑以下名称:

  • Nicholas Raleigh
  • Nihcolas Raleigh
  • Nico Raleigh
  • Nik Raleigh
  • Nicky Raleigh
  • Nick Raleigh
  • Nikolaus Raleigh
  • Nicola Raleigh
  • Nikki Raleigh
  • Nikola Raleigh
  • Nikolai Raleigh
  • Nikolaj Raleigh

试图通过抽象来匹配那些,无论是Levenshtein Distance还是Double Metaphone,都会产生误报和漏报。这是抽象的本质。获得专注且准确的结果集的最佳方法是使用词库(即使这并不完美)。不幸的是,组建一个全面的名词词典是一项巨大的工作;了解任务结束the stats on the NameX site


更新:Oracle 11gR2包含针对名称搜索而定制的Oracle Text扩展。这非常整洁,绝对是第一个开始的地方。 Find out more