0

SQL Server 2012 を実行し、800K 行のテーブルに FTS インデックスを適用しました。テーブルには、行の任意のデータが入力されました。私は皮肉を使ってユーザー定義テキストを解析し、次のテキストを検索します」

Zaphod gave him

次のSQLを実行してから、データベースにあることがわかっています

declare @searchterm nvarchar(max) = '%Zaphod gave him%'

select fact.id,<MyColumns>
from [dbo].[fact] as fact
where MyColumnAName like @searchterm or
      MyColumnBName like @searchterm 
      ....

Irony エンジンは次のステートメントを生成します。

 (( FORMSOF (INFLECTIONAL, Zaphod)  AND
    FORMSOF (INFLECTIONAL, gave) ) AND  
    FORMSOF (INFLECTIONAL, him) )

そしてそれをSQLに追加します

SELECT fact.id, KEY_TBL.RANK, <MyColumns>
FROM [dbo].[Fact] as fact
INNER JOIN FREETEXTTABLE(fact,*, '(( FORMSOF (INFLECTIONAL, Zaphod)  AND  
                                     FORMSOF (INFLECTIONAL, gave) ) AND  
                                     FORMSOF (INFLECTIONAL, him) )') AS KEY_TBL
ON fact.ID = KEY_TBL.[KEY]
ORDER BY RANK DESC

正確なテキストを 2 回含む 1 つの行 (2 つの異なる行) は、この正確な数値を 1 回含む多くの行の後に配置されます。
それらはすべて同じランクになります。
この行を結果セットの前に設定できますか?
ランクが十分に正確ではないため、そのようにソートされていますか?
ありがとう。

4

1 に答える 1