0

我按照这个 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]

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

谢谢

4

2 回答 2

2

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

CONTAINSTABLE (Transact-SQL)

在此处查看示例“I. Using CONTAINS with a logic operator (AND)”:

包含 (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'

查找包含此处、那里和任何地方的文本。

于 2012-04-16T15:39:48.927 回答
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]
于 2012-04-16T15:37:08.977 回答