如何在Lucene中提高Sql Server全文搜索中的术语相关性?

时间:2009-12-08 00:16:19

标签: sql-server full-text-search lucene

我正在使用包含'ISABOUT(term1,term2,term3)'的containsstable进行典型的全文搜索,虽然它支持的术语加权不是我需要的。我需要能够提高文本某些部分中包含的术语的相关性。例如,在搜索网页时,元标签或页面标题的惯常加权与正文文本的加权不同。虽然我没有处理网页,但我确实寻求相同的功能。在Lucene,它被称为Document Field Level Boosting。如何在Sql Server全文搜索中本地执行此操作?

2 个答案:

答案 0 :(得分:1)

这只是一个想法 - 是否可以隔离你需要提升的部分,然后将两者加在一起?我没有时间把它放在一起,但是假设你有一个'文档'列和一个计算的'标题'列,你可以做这样的事情;

with compoundResults([KEY], [RANK]) as
(
 select 
     a.[key], 
     a.[rank] *0.7 + b.[rank] * 0.3
 from FREETEXTTABLE(dbo.Docs, document, @term) a 
 inner join FREETEXTTABLE(dbo.Docs, header, @term) b
 on a.[Key] = b.[Key]
)
select * from dbo.Docs c
 LEFT OUTER JOIN compoundResults d
  ON c.TermId = d.[KEY]

所以这个例子使用freetexttable而不是包含,但需要注意的是,有一个CTE可以选择一个加权等级,从文件正文中取十分之七,从标题中取十分之三。

答案 1 :(得分:0)

SQL Server FTS中不存在您要查找的本机功能。

您的数据是什么样的?是否可以以某种方式扩展关键字模式,以便它们匹配文档的相应部分?类似的东西:

ISABOUT("title ~ keyword ~ title" weight 0.8, "keyword" 0.2)