2013-01-11 159 views
-1

如何才能在Oracle中進行模糊名稱搜索?Oracle模糊文本搜索

例如:

我們的數據系統首選的郵件爲:

薩科吉姆先生羅利

但在Facebook或其他搜索欄,名字傳遞給算法是:

尼克吉姆·羅利

這一過程將運行搜索名稱反對所有首選的名字,然後返回一個包含最匹配的字符結果:

先生[尼克] OLA的吉姆·羅利

[尼克吉姆·羅利

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'); 

和現在能夠索引成功地retireve

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

這看起來像你自己根本沒有努力。搜索「模糊文本搜索oracle」立即與[contains](http://docs.oracle.com/cd/B13789_01/text.101/b10730/cqoper.htm)運算符聯繫,第二個表示更多[general概述](http://docs.oracle.com/cd/B28359_01/text.111/b28303/query.htm);在文檔中鏈接的是[ctxcat索引](http://docs.oracle.com/cd/B28359_01/text.111/b28303/ind.htm#i1007263)的描述,您將需要。你有沒有嘗試過這些?你這樣做有什麼問題? – Ben

+0

感謝您的及時回覆。我對「包含」的理解是我的例子不起作用。因爲'尼克Balcom羅利'不包含在'尼古拉斯Balcom羅利'。你是對的,我經常不明白我需要問的問題。我正在調查'Levenshtein距離公式' – Lloyd

+0

我很猶豫,在你第一次居高臨下的反應之後,我很猶豫,但我真的很努力讓模糊搜索與多個術語一起工作。我將澄清[編輯]我的問題,看看我能否得到一些指示。 – Lloyd

回答

4

名稱匹配是。Oracle的文本索引支持模糊匹配和制止,這是一個開始,但考慮到這些名字:

  • 尼古拉斯·羅利
  • Nihcolas羅利
  • 尼科羅利
  • 聶羅利
  • 尼基·羅利
  • Nick Raleigh
  • Nikolaus Raleigh
  • Nicola Raleigh
  • 尼克羅利
  • 尼古拉·羅利
  • 尼古拉·羅利
  • 尼古拉·羅利

試圖匹配那些通過抽象,無論是Levenshtein距離或雙音位,會產生假陽性和假陰性。這是抽象的本質。獲得專注和準確的結果集的最好方法是使用詞庫(即使這不完美)。不幸的是,彙集一個全面的名稱詞庫是一項巨大的工作;感受the stats on the NameX site的任務感。


更新:Oracle 11gR2包含針對名稱搜索定製的Oracle文本的擴展。這非常整齊,而且絕對是第一個開始的地方。 Find out more