我可以说在全文搜索中,一列比另一列更重要吗?

时间:2009-08-19 07:53:34

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

我在SQL Server 2008中使用全文索引。

我似乎无法找到这个问题的答案。假设我在一个包含“Name”和“Description”列的表上有一个全文索引。我想使“名称”列比“描述”列更重要。

因此,如果您搜索“互联网”,无论在描述中有多少互联网出现,名称为“互联网”的结果将始终排在首位。它一定是可能的吗?

3 个答案:

答案 0 :(得分:1)

我刚刚发现这篇文章。

http://www.goodercode.com/wp/?p=10

在我的代码中它变成了这样。完全符合我的要求:)感谢您的帮助!

SELECT dbo.Item.Name, dbo.Item.[Description],NAME_SRCH.RANK AS rank1, DESC_SRCH.RANK AS rank2
FROM dbo.Item LEFT OUTER JOIN
FREETEXTTABLE(dbo.Item, name, 'Firefox') NAME_SRCH ON
dbo.Item.ItemId = NAME_SRCH.[KEY] LEFT OUTER JOIN
FREETEXTTABLE(dbo.Item, *, 'Firefox') DESC_SRCH ON
dbo.Item.ItemId = DESC_SRCH.[KEY]
ORDER BY rank1 DESC, rank2 DESC

答案 1 :(得分:0)

您可以使用Case将计算列添加到选择列表中,其中您已根据感兴趣的列中搜索项的出现为该列指定值,然后按该列排序。例如:

SELECT (CASE WHEN Name LIKE "%searchTerm%" THEN 10
            WHEN Description LIKE "%searchTerm%" THEN 5
            ELSE 0 END CASE) AS computedValue
FROM myTable
ORDER BY computedValue DESC

答案 2 :(得分:0)

据我所知,没有T-SQL语法来指定列的速率。 但你可以通过选择技巧获得这个。 (假设使用FREETEXTTABLE,但您可以使用其他FTS结构重写)

SELECT CASE 
            WHEN ISNULL(hi_prior.RANK) low_prior.KEY
            ELSE hi_prior.RANK END --hi prior is selected whenever is possible
FROM
  FREETEXTTABLE (Table1, (HiPriorColumn), @query) hi_prior
FULL OUTER JOIN
  FREETEXTTABLE (Table1, (LowPriorColumn), @query) low_prior
ON (hi_prior.KEY = low_prior_KEY)

如果你需要两个结果 - 使用UNION,但在某个速率上乘以最低值:low_prior.RANK * 0.7