如何搜索获得“最佳”结果

时间:2010-06-16 20:11:35

标签: sql full-text-search

假设某人输入此搜索(在表单上):

Nicole Kidman films

我可以使用哪种SQL来查找“最佳”结果?

我想这样的事情:

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

我的问题是如何获得最相关的结果? 非常感谢你!

3 个答案:

答案 0 :(得分:2)

您正在寻找的内容通常称为“全文搜索”或“自然语言搜索”。不幸的是,它不是标准的SQL。这是一个关于如何在mysql中执行此操作的教程:http://devzone.zend.com/article/1304

您应该能够找到其他数据库引擎的示例。

答案 1 :(得分:2)

Full-Text Search

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

此查询将按相关性的顺序返回行,如全文搜索算法所定义。

注意:这是针对MySQL的,其他DBMS具有类似的功能。

答案 2 :(得分:0)

在SQL中,等号不支持其中的通配符 - 您的查询应该是:

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

但是如果存在索引,那么左侧的通配符将不会使用索引。

更好的方法是使用全文搜索,大多数数据库本身提供,但有像Sphinx这样的第三方供应商。每个人都有自己的算法,根据搜索的标准分配排名/分数,以显示算法认为最相关的内容。