2011-06-09 23 views
4

タイトル列にフルテキスト検索が有効なテーブルがあります。私はcontainstableと重み付け検索をしようとするが、私はRank値の算術オーバーフローを取得します。 int型、値= -83886083125.000076のための算術オーバーフローエラー:私はこの私が取得するクエリを実行するとSQL Server 2008 Containstableはweighted_termで負のランクを生成します

SELECT ID, CAST(Res_Tbl.RANK AS Decimal) AS Relevancy , Title 
    FROM table1 AS INNER JOIN 
    CONTAINSTABLE(table1,Title,'ISABOUT("pétoncle" weight (.8), "pétoncle" weight (.8), "PÉTONCLE" weight (.8))',LANGUAGE 1036) AS Res_Tbl 
    ON ID = Res_Tbl.[KEY] 

に従うようクエリがあります。

2つの ';' ISABOUT関数でクエリが正常に完了しました。

結果がない場合は、クエリが正常に完了する必要があります。

これを解決する方法は誰か分かりますか?

この質問はdba.stackexchange.com

+0

問題を再現するサンプルデータを追加できますか?私は自分でいくつかのサンプルを作成しようとしましたが、これを再現できませんでした。また、CASTをあなたの選択にドロップするとどうなりますか? – Richard

+0

私はキャストをドロップする場合、私は同じエラーが発生します。問題はCONTAINSTABLE関数の中にあります。データがお客様のものであるため、データを提供することはできません。私は述語を操作するときに何か言及します。特殊文字(&,#,;)のいずれかを削除すると、クエリは正常に実行されます。 – Nico

答えて

1

予選にもあります:私はこれを再作成することはできませんので、私はこの問題を修正するかどうかを確実に知ることができないんです。しかし、これらは私が見ているものです。

まず、アンパサンド、シャープ記号、およびセミコロンは単語区切り文字です。つまり、文字列 "p é toncle"を検索する代わりに、実際に検索しているのは "p"、 "233"、 "toncle"です。明らかに、それはあなたの意図ではありません。

データセットのどこかに "p é toncle"というテキストがあると仮定する必要があります。つまり、完全な文字列が必要です。

できることがいくつかあります。

1)ストップワードを一括して無効にします。フルテキストインデックスを変更してオフにすることで、これを行うことができます。

あなたのデータベースに構文エラー発生しないように、このために、SQL Server 2008の互換性に設定持っている必要があります。注:

ALTER FULLTEXT INDEX ON Table1 SET STOPLIST OFF; 

2)あなたは、空のストップリストを作成する場合は、新しいストップリスト

を作成します。必要なストップワードを追加するか、システムストップリストをコピーして、不要なストップワードを削除することができます。 (私は第2のアプローチを助言する)。

私はシステムのストップリストに&または#が見つかりませんでしたので、ハードコーディングされている可能性があります。ストップリストをオフにしなければならない場合があります。

3) "#233; toncle"の場合を無視して検索を変更します。

あなたが "P é toncle" をドロップした場合ISABOUTからと "Pのtoncle" に変更し、それがうまくいくかもしれない:

'ISABOUT("pétoncle" weight (.8), "p toncle" weight (.8))' 

それらは単にいくつかのアイデアです。私が言ったように、システムにアクセスすることやシナリオを再現することができないと、私たちはあまり手助けできなくなります。


あなたの再探索の喜びのためにいくつかのより多くの情報:によって返された負のランクの結果を探して、このページになった人々のために

0

私がしたようにSQL Serverは、それはc一致条件の一部が長すぎる(文字数制限を超えている)場合に発生します。 SQL Serverでは、問合せ時に実際にエラーが発生したりエラーが発生したりすることはありません。代わりに、ランク付けはほとんどがゴミになり、一部の選択肢に対してマイナスのランクを生成します(私の場合は、トークン/単語の長さを制限し、この問題を避けてください(おそらく、SQL Server 2008のフルテキスト検索の深いバグです)。

関連する問題