2011-01-05 6 views
3

私はAdventureWorksデータベースの全文検索で遊んでいます。 production.ProductDescriptionでは、私は "山"と "置き換え"を検索しようとしています。私は以下の説明との記録があります知っている単一のCONTAINSTABLE検索条件で屈折検索と近接検索を組み合わせることはできますか?

:これが0行を返した

SELECT 
    pd.Description, 
    ct.RANK 
FROM Production.ProductDescription AS pd 
    INNER JOIN CONTAINSTABLE(
    Production.ProductDescription, 
    Description, 
    'mountain NEAR replacements' 
) AS ct ON pd.ProductDescriptionID = ct.[KEY] 
ORDER BY ct.RANK DESC; 

High-performance mountain replacement wheel. 

私の最初の周りに行くが、このでした。私が 'Mountain NEAR Replacements'を 'Mountain NEAR Replacement'に変更すると、結果のデータセットで期待した記録が得られます。

私の次の試みは、以下のような何かしようとすることでした。

SELECT 
    pd.Description, 
    ct.RANK 
FROM Production.ProductDescription AS pd 
    INNER JOIN CONTAINSTABLE(
    Production.ProductDescription, 
    Description, 
    'FORMSOF(INFLECTIONAL, "replacements") NEAR "mountain"' 
) AS ct ON pd.ProductDescriptionID = ct.[KEY] 
ORDER BY ct.RANK DESC; 

をしかし、これは私がCONTAINSTABLEための文法を見ていた

Syntax error near 'NEAR' in the full-text search condition 'FORMSOF(INFLECTIONAL, "replacements") NEAR "mountain"'. 

エラーを生成し、それはあなたができることが判明します同じ検索条件の中でgeneration_term(例えばFORMSOF())と近接項(例えばNEAR)を持っています。

Iは、テーブルに次のレコードを追加:

Replacement parts for you omg gee-whiz mountain 

のレコードは以下FTSクエリで(96)高をランク付けする:

SELECT 
    pd.Description, 
    ct.RANK 
FROM Production.ProductDescription AS pd 
    INNER JOIN CONTAINSTABLE(
    Production.ProductDescription, 
    Description, 
    'FORMSOF(INFLECTIONAL,"replacements") AND "mountain"' 
) AS ct ON pd.ProductDescriptionID = ct.[KEY]  
ORDER BY ct.RANK DESC; 

これに(32)期待ランクが低いとしてクエリ:

このような例では、 rmsの山と交代して、交替や山を含むレコードが相対的に高いランクのレコードを返しますが、そこに行く方法は失われます。

答えて

2

あなたは

を「あなたOMGジー・達人の山用交換パーツ」を追加最後のレコードは、単語の置き換えは、ランキングが極めて低い理由である、ワード山の近くに本当にないです。

Adventureworksの例では、実際には非常に短いフィールドで、NEAR演算子が意図したものではない製品の説明を見ています。

この場合、私はちょうどあなたのCONTAINSTABLE例とその

'FORMSOF(INFLECTIONAL, "replacement") AND FORMSOF(INFLECTIONAL, "mountain")' 

またはvarationを使用します。

SELECT 
    pd.Description, 
    ct.RANK 
FROM Production.ProductDescription AS pd 
    INNER JOIN CONTAINSTABLE( 
    Production.ProductDescription, 
    Description, 
    'FORMSOF(INFLECTIONAL,"replacements") AND FORMSOF(INFLECTIONAL,"mountain")' 
) AS ct ON pd.ProductDescriptionID = ct.[KEY]  
ORDER BY ct.RANK DESC; 

興味深いことに、あなたのクエリでは96位になっていますが、私には32ランクしか与えられません。私はSQL Server 2005を使ってテストしており、デフォルトでProduct.ProductDescription.Descriptionにフルテキストインデックスを設定しています。

高いランク付けに正確に貢献しているものを言うのは難しいですが、これらの非常に似通ったエントリーはかなり異なるランクを持っています。 エントリーレベルライダーの交換用マウンテンホイール。 - 96 カジュアルから真剣なライダーの交換用マウンテンホイール。 - 48

関連する問題