PHP MySQL搜索和按相关性排序

zuk*_*uk1 11 php mysql search

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

普通查询"apple iphone applications"将使用%apple iphone application%搜索数据库,但是如果没有按照确切顺序显示该短语的记录,搜索将不会产生任何结果.

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

Iphone Applications From Apple
Apple Make The Best Apple Iphone Applications
Iphone Applications
Run Code Online (Sandbox Code Playgroud)

他们的排名如下:

Apple Make The Best Apple Iphone Applications
Iphone Applications From Apple
Iphone Applications
Run Code Online (Sandbox Code Playgroud)

由于找到了多少搜索项实例.见突出显示:

[Apple] Make The Best [Apple] [Iphone] [Applications]
[Iphone] [Applications] From [Apple]
[Iphone] [Applications]
Run Code Online (Sandbox Code Playgroud)

我希望我能够很好地解释这一点,如果有人能给我任何指示,我将非常感激.

Nei*_*ken 7

看看MySQL FULLTEXT搜索功能,它们应该通过相关性自动返回结果,并让您更好地控制搜索

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

  • 我知道这是旧的,但如果有人绊倒了这个.它们现在由innoDB支持 (3认同)

Mar*_* H. 7

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

无全文:

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
Run Code Online (Sandbox Code Playgroud)

全文:

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;
Run Code Online (Sandbox Code Playgroud)


Fil*_*erg 6

一个快速的谷歌给了我这个链接.

例:

select title, match (title,content) against (”internet”) as score 
from cont 
where match (title,content) against (”internet”) limit 10;
Run Code Online (Sandbox Code Playgroud)