SQL 搜索结果相关性排序问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL 搜索结果相关性排序问题相关的知识,希望对你有一定的参考价值。

参考技术A 如果先按标题中同时出现"数据库"和"Sql"
>>
内容中同时出现"数据库"和"Sql"
>>
标题中出现"数据库"或"Sql"
>>内容中出现"数据库"或"Sql"
再按时间降序只能用添加辅助列的方法实现:
Select
Title,Content,case
when
Title
like
'%数据库%'
and
Title
like
'%Sql%'
then
1
when
Content
like
'%数据库%'
and
Content
like
'%Sql%'
then
2
when
Title
like
'%数据库%'
or
Title
like
'%Sql%'
then
3
when
Content
like
'%数据库%'
or
Content
like
'%Sql%'
then
4
end
as
priority
from
Article
order
by
priority,tTime
desc
参考技术B 补充,我上面的方法将不包含数据库或SQL的也显示出来了,可将SQL语句改为:
Select
Title,Content,case
when
Title
like
'%数据库%'
and
Title
like
'%Sql%'
then
1
when
Content
like
'%数据库%'
and
Content
like
'%Sql%'
then
2
when
Title
like
'%数据库%'
or
Title
like
'%Sql%'
then
3
when
Content
like
'%数据库%'
or
Content
like
'%Sql%'
then
4
end
as
priority
from
Article
where
Title
like
'%数据库%'
or
Title
like
'%Sql%'
or
Content
like
'%数据库%'
or
Content
like
'%Sql%'
order
by
priority,tTime
desc

如何使用 NSPredicate 按相关性对搜索结果进行排序?

【中文标题】如何使用 NSPredicate 按相关性对搜索结果进行排序?【英文标题】:How to sort a search result using NSPredicate by relevance? 【发布时间】:2011-10-20 16:57:56 【问题描述】:

我有一系列产品类别。每个产品类别都有多个属性,例如名称、功能、成分等。

我使用 NSPredicate 开发了一个简单的搜索算法,它允许我在产品数组中搜索特定字符串。

简而言之,谓词类似于:“product.name 中的字符串或 product.ingredients 中的字符串或 product.functions 中的字符串...”。

我可以正确获取结果数组,即在其属性之一中包含搜索字符串的产品列表。

但是,我的问题是,如何按相关性对结果进行排序?即如果一个搜索字符串在一个产品类中多次命中,我自然想把这个产品放在搜索结果数组的顶部?

谢谢!

【问题讨论】:

【参考方案1】:

我编写了一个可以回答您问题的示例。我并不是说这是最好的实现,但它确实有效。

NSArray *strings = @[@"A",@"B",@"C",@"A",@"D",@"E",@"B",@"B",@"B"];

NSMutableDictionary *sortedDictionary = [NSMutableDictionary dictionary];
for (NSString *string in strings) 
    NSNumber *count = [sortedDictionary objectForKey:string];
    if (count) 
        count = @(count.integerValue + 1);
     else 
        count = @(1);
    
    [sortedDictionary setObject:count forKey:string];


NSArray *result = [sortedDictionary keysSortedByValueWithOptions:NSNumericSearch usingComparator:^NSComparisonResult(id obj1, id obj2) 
    return [obj2 compare:obj1];
];
NSLog(@"%@", result); // (B,A,D,E,C)

【讨论】:

以上是关于SQL 搜索结果相关性排序问题的主要内容,如果未能解决你的问题,请参考以下文章

SQL查询结果加入排序值的问题

如何按相关性对MYSQL全文搜索结果进行排序

搜索结果后对 SQL 查询进行排序

怎么用sql对搜索结果排序并添加序号

全文搜索按相关性分数排序

MySQL 全文搜索以布尔模式按相关性排序