PHP MySQL搜索和按相关性排序

时间:2008-12-05 15:37:08

标签: php mysql search

我知道如何定期进行php mysql搜索并显示结果。但是,由于我想要实现的性质,我需要能够按相关性进行排序。让我更好地解释一下:

普通查询“apple iphone应用程序”将使用%apple iphone application%搜索数据库,但如果没有按照确切顺序显示该短语的记录,搜索将不会产生任何内容。

我基本上需要做的是分别搜索“apple”,“iphone”和“应用程序”,然后将结果合并为一个,然后我需要根据找到的单词的实例对相关性进行评分在记录中。例如,如果我做了我想做的事情,它会返回以下内容:

Iphone Applications From Apple
Apple Make The Best Apple Iphone Applications
Iphone Applications

他们的排名如下:

Apple Make The Best Apple Iphone Applications
Iphone Applications From Apple
Iphone Applications

由于找到了多少个搜索字词实例。见突出显示:

[Apple] Make The Best [Apple] [Iphone] [Applications]
[Iphone] [Applications] From [Apple]
[Iphone] [Applications]

我希望我已经对此做了很好的解释,如果有人能给我任何指示,我将非常感激。

5 个答案:

答案 0 :(得分:7)

看看MySQL FULLTEXT search functions, 这些应该通过相关性自动返回结果,并让您更好地控制搜索

使用全文索引的唯一潜在问题是InnoDB表不支持它们。

答案 1 :(得分:6)

快速谷歌给了我this link

示例:

select title, match (title,content) against (”internet”) as score 
from cont 
where match (title,content) against (”internet”) limit 10;

答案 2 :(得分:4)

也许这可能对某人有帮助(按相关性排序并保持字数):

无全文:

SELECT *, ( (value_column LIKE '%rusten%') + (value_column LIKE '%dagen%') + (value_column LIKE '%bezoek%') + (value_column LIKE '%moeten%') ) as count_words
FROM data_table
WHERE (value_column LIKE '%dagen%' OR value_column LIKE '%rusten%' OR value_column LIKE '%bezoek%' OR value_column LIKE '%moeten%')
ORDER BY count_words DESC

全文:

SELECT * FROM data_table
WHERE MATCH(value_column) AGAINST('+dagen +rusten +bezoek +moeten' IN BOOLEAN MODE)
ORDER BY MATCH(value_column) AGAINST('+dagen +rusten +bezoek +moeten' IN BOOLEAN MODE) DESC;

答案 3 :(得分:1)

SELECT field2, field3, ..., MATCH(field1, field2) AGAINST ("search string") AS relevance WHERE MATCH(field1, field2) AGAINST "search string" ORDER BY relevance DESC LIMIT 0,10

在结果集中,将有一个字段“related”,用于对结果进行排序。

答案 4 :(得分:0)

我不知道你想要什么,但以下代码肯定适合你。

SELECT ("some text here" or `column_name`) RLIKE "Apple|Iphone|Application" AS Result ORDER BY Result DESC;

用Bar(|)分隔所有单词,但结果将是1或0成立或不成立。 如果您想获得成立的行,请参阅下文。

SELECT * FROM "table_name" WHERE `column_name` RLIKE "Apple|Iphone|Application";