2008-12-05 166 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";