2008-12-05 108 views
8

我知道如何做一个正常的php mysql搜索并显示结果。但是,由于我试图完成的本质,我需要能够根据相关性进行排序。让我来解释这更好:PHP MySQL搜索和排序按相关度排序

普通查询“苹果iPhone应用程序”,并将搜索使用%的苹果iPhone应用程序的%数据库,但如果没有这显示在正确的顺序搜索会产生什么,乐句记录。

我基本上需要做的就是分别搜索'apple','iphone'和'applications',然后将结果合并为一个,然后我需要根据这个词的多少个实例对相关性进行分级在记录中找到。举例来说,如果我做了我想做的事,把杯子还给他们以下几点:

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] 

我希望我已经解释了这不够好,我会非常感激,如果任何人都可以给我指点。

回答

6

看一看的MySQL FULLTEXT search functions, 这些都将自动返回按相关结果,并给你更多的控制您的搜索

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

+2

我知道这是旧的,但如果有人绊倒在这。他们现在由innoDB支持 – 2017-02-23 04:52:38

5

快速谷歌给了我this link

例子:

select title, match (title,content) against (”internet”) as score 
from cont 
where match (title,content) against (”internet”) limit 10; 
0
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 

在结果集中,会有一个“相关性”字段,用于此处对结果进行排序。

1

也许这可以帮助某人(顺序由相关性和保持字数):

无全文:

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; 
+1

这对我有用。我希望结果按相关性排序,但我也希望返回的部分匹配,全文不支持。 – cmann 2015-06-09 22:14:00

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";