我知道如何定期进行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]
我希望我已经对此做了很好的解释,如果有人能给我任何指示,我将非常感激。
答案 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";