2010-06-16 41 views
0

假如有人進入這個搜索:如何搜索獲得(在一個形式)的「最佳」的結果

Nicole Kidman films 

哪些SQL我可以用它來找到「最好」的結果?

我想是這樣的:

SELECT * FROM myTable WHERE (Field='%Nicole Kidman Films%' OR Field='%Nicole%' OR Field='%Kidman%' OR Field='%Films%') 

我的問題是如何獲得最相關的結果呢? 非常感謝!

+1

定義「最相關的」。 – 2010-06-16 20:12:16

+1

告訴我什麼是「最好」和「最相關」的意思,以及如何計算它們,我會給你一個答案。 – Oded 2010-06-16 20:14:01

+0

你是對的..但我絕對不知道論點.. – stighy 2010-06-16 20:17:58

回答

2

Full-Text Search

SELECT * FROM myTable WHERE MATCH(Field) AGAINST('Nicole Kidman Films') 

這個查詢將在相關的順序返回行,通過全文搜索算法定義。

注意:這是針對MySQL的,其他DBMS具有類似的功能。

+0

T H A N K Y O U V E R Y M U C H ...我絕對不知道這個功能!很棒.. – stighy 2010-06-16 20:29:23

2

您要查找的內容通常稱爲「全文搜索」或「自然語言搜索」。不幸的是,它不是標準的SQL。下面是關於如何在mysql中執行的教程:http://devzone.zend.com/article/1304

您應該能夠找到其他數據庫引擎的示例。

0

在SQL中,等號不支持通配符在裏面 - 你的查詢確實應該:

SELECT * 
    FROM myTable 
WHERE Field LIKE '%Nicole Kidman Films%' 
    OR Field LIKE '%Nicole%' 
    OR Field LIKE '%Kidman%' 
    OR Field LIKE '%Films%' 

但通配左側將不會使用索引,如果存在。

更好的方法是使用全文檢索,大多數數據庫本身提供,但有像第三方供應商像獅身人面像。每個人都有自己的算法來根據搜索的標準分配排名/分數,以顯示算法認爲最相關的內容。

相關問題