0

このSOの質問の指示に従って、私が持っている食品データベースで全文検索を行うためのlinq関数を作成しました。この DB には 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

予想どおり、すべての単語が含まれているわけではなく、検索された列内の任意の単語を検索するために機能するため、より多くの結果が得られます。AND などは FREETEXTTABLE では使用できないため、提供された単語の間に AND を使用できる CONTAINSTABLE などを使用する必要があります。

CONTAINSTABLE (Transact-SQL)

「I. 論理演算子 (AND) での CONTAINS の使用」の例を参照してください。

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'

ここ、そこ、どこでもを含むテキストを探します。

于 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 に答える