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

本文关键字:结果 关键字 搜索 LINQ 文搜索 使用 | 更新日期: 2023-09-27 18:31:27

我按照这个SO问题中的说明创建了一个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]

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

谢谢

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

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

CONTAINSTABLE (Transact-SQL)

请看示例"I. 将 CONTAINS 与逻辑运算符 (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'

查找包含此处、那里和所有位置的文本。

为每个搜索词连接内部连接。

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]