使用 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]
如何通过更改上面的代码来减少每个新关键字的结果?
谢谢
您可以获得更多结果,因为它可以查找搜索列中的任何单词,而不是像您期望的那样包含所有单词。你不能在 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]