使用LINQ进行全文搜索,减少每个关键字的结果

时间:2012-04-16 14:37:28

标签: c# asp.net sql-server linq-to-sql

我按照this SO question中的说明创建了一个linq函数,对我拥有的食物数据库进行全文搜索。这个数据库中有超过7000条记录,每个关键字我添加的结果变大,而不是更小。

这是我职能的核心:

SELECT *
FROM USDA_Foods AS FT_TBL 
    INNER JOIN FREETEXTTABLE(USDA_Foods,
    Shrt_Desc, 
    @searchWord) AS KEY_TBL
ON FT_TBL.foodId = KEY_TBL.[KEY]

如何通过更改上面的代码来减少每个新关键字的结果?

由于

2 个答案:

答案 0 :(得分:2)

您可以获得更多结果,因为它可以查找搜索列中的任何单词,而不是像您期望的那样包含所有单词。你不能在FREETEXTTABLE中使用AND或任何东西,所以你必须使用像CONTAINSTABLE这样的东西,它允许你在提供的单词之间使用AND。

CONTAINSTABLE (Transact-SQL)

看一下这个例子"我。使用CONTAINS与逻辑运算符(AND)"这里:

CONTAINS (Transact-SQL)

语法也适用于CONTAINSTABLE。

SELECT *
FROM USDA_Foods AS FT_TBL 
    INNER JOIN CONTAINSTABLE(USDA_Foods,
    Shrt_Desc, 
    @searchWord) AS KEY_TBL
ON FT_TBL.foodId = KEY_TBL.[KEY]

您的@searchWord应该是

'here AND there AND everywhere'

查找此处,此处和任何地方的文字。

答案 1 :(得分:0)

为每个搜索词连接INNER JOINS。

SELECT * 
FROM USDA_Foods AS FT_TBL 
    INNER JOIN FREETEXTTABLE(USDA_Foods,
    Shrt_Desc, 
    @searchWord1) AS KEY_TBL1
ON FT_TBL.foodId = KEY_TBL1.[KEY]
    INNER JOIN FREETEXTTABLE(USDA_Foods,
    Shrt_Desc, 
    @searchWord2) AS KEY_TBL2
ON FT_TBL.foodId = KEY_TBL2.[KEY]