假如有人進入這個搜索:如何搜索獲得(在一個形式)的「最佳」的結果
Nicole Kidman films
哪些SQL我可以用它來找到「最好」的結果?
我想是這樣的:
SELECT * FROM myTable WHERE (Field='%Nicole Kidman Films%' OR Field='%Nicole%' OR Field='%Kidman%' OR Field='%Films%')
我的問題是如何獲得最相關的結果呢? 非常感謝!
假如有人進入這個搜索:如何搜索獲得(在一個形式)的「最佳」的結果
Nicole Kidman films
哪些SQL我可以用它來找到「最好」的結果?
我想是這樣的:
SELECT * FROM myTable WHERE (Field='%Nicole Kidman Films%' OR Field='%Nicole%' OR Field='%Kidman%' OR Field='%Films%')
我的問題是如何獲得最相關的結果呢? 非常感謝!
SELECT * FROM myTable WHERE MATCH(Field) AGAINST('Nicole Kidman Films')
這個查詢將在相關的順序返回行,通過全文搜索算法定義。
注意:這是針對MySQL的,其他DBMS具有類似的功能。
T H A N K Y O U V E R Y M U C H ...我絕對不知道這個功能!很棒.. – stighy 2010-06-16 20:29:23
您要查找的內容通常稱爲「全文搜索」或「自然語言搜索」。不幸的是,它不是標準的SQL。下面是關於如何在mysql中執行的教程:http://devzone.zend.com/article/1304
您應該能夠找到其他數據庫引擎的示例。
在SQL中,等號不支持通配符在裏面 - 你的查詢確實應該:
SELECT *
FROM myTable
WHERE Field LIKE '%Nicole Kidman Films%'
OR Field LIKE '%Nicole%'
OR Field LIKE '%Kidman%'
OR Field LIKE '%Films%'
但通配左側將不會使用索引,如果存在。
更好的方法是使用全文檢索,大多數數據庫本身提供,但有像第三方供應商像獅身人面像。每個人都有自己的算法來根據搜索的標準分配排名/分數,以顯示算法認爲最相關的內容。
定義「最相關的」。 – 2010-06-16 20:12:16
告訴我什麼是「最好」和「最相關」的意思,以及如何計算它們,我會給你一個答案。 – Oded 2010-06-16 20:14:01
你是對的..但我絕對不知道論點.. – stighy 2010-06-16 20:17:58