2011-12-24 31 views
4

我一直在瀏覽一些社交網絡,並發現有能力通過搜索人名:年齡範圍,城市,國家和性別。 有趣的是,所有這些信息都可以插入到由空格分隔的一個文本框中。然後搜索引擎一些如何以非常準確的方式解析它並返回一個結果列表。智能搜索帶有一個輸入

一方面它看起來非常簡單:按空間拆分查詢並搜索所有相關的表格以查找出現。到現在爲止還挺好。 然而

  1. 有哪個城市的名字都超過2個字和用戶可以輸入他們不同,因爲它是免費的文本。
  2. 有跡象表明,超過2個字

問:

怎樣才能分割在這樣的方式查詢,我們當然知道它 部分應搜索在哪裏?即用戶表中的城市名稱,城市中的城市 ,國家中的國家等等?

是我迄今所做的是:

  1. 填充用戶數據源的所有用戶
  2. 檢查查詢
  3. 如果國家從國家tableexist存在,那麼過濾數據源,讓用戶從該國家只有
  4. 檢查是否存在於查詢中的城市表
  5. 如果存在,則過濾數據源以僅讓來自該城市的用戶

等爲每個表,每次當我們發現我們從查詢中刪除找到的部分表 - 比賽,留給我們的最自由參數:名稱

這似乎工作,如果用戶會確切知道城市/國家等是如何寫在我的分貝, 但實際情況是用戶可能進入城市的一部分或錯誤輸入城市。

我不知道我是否在正確的方向與我所做的一切。只是一個開始點...

PS:我只需要一個算法流程,所以編程語言並不真正米。任何想法或指導都是值得歡迎的。

感謝

回答

0

這些類型的查詢是不利於relational databases。如果不是必須的,你可能會想到使用Lucene.Net(c#)Lucene(java)

0

我有零經驗在這裏,但我想這是natural language processing

我覺得做這種類型的處理的一部分被接受,你贏了」 t總是對的。從中可以看出,你的目標是試圖找出你對某些假設有信心的案例。

例如,

如果用戶在紐約市尋找李四,他們不會鍵入它爲jane new york city doe,名稱,城市將永遠是連續的羣體。你不知道每個組的長度,但是,你只有有限的組合嘗試。給定jane doe new york city,你可以迭代連續組的組合。

scoreAsName('jane') 
scoreAsName('jane doe') 
scoreAsName('jane doe new') 

...等等... 並做scoreAsCity相同。

這兩個應該有一些清晰的高分得分組合。也許,最好的選擇是產生最高總和的名稱和城市分數的組合。你需要制定一個評分算法,可能很大程度上基於數據庫匹配,但也可能使用輔助輸入,如提高本地名稱匹配的分數。

非常有趣的話題。