我按照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]
如何通过更改上面的代码来减少每个新关键字的结果?
由于
答案 0 :(得分:2)
您可以获得更多结果,因为它可以查找搜索列中的任何单词,而不是像您期望的那样包含所有单词。你不能在FREETEXTTABLE中使用AND或任何东西,所以你必须使用像CONTAINSTABLE这样的东西,它允许你在提供的单词之间使用AND。
看一下这个例子"我。使用CONTAINS与逻辑运算符(AND)"这里:
语法也适用于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]