0

Web サイトでフリーテキストを使用して検索結果を改善していますが、理解できない内容が表示されます。

これをフリーテキスト検索として使用する場合 (with containtstable())

isabout("*redflower*" weight (.3), "*red*" weight (.2), flower weight (.1))

Red Mason Bee Boxはランクまたは 172 で取得Wildflower Seeds - Red Campionし、ランクも 172 で取得します。この説明は、検索される唯一のフィールドです。Wildflower Seeds - Red Campion1 つだけでなく両方の用語が含まれているため、上位にランク付けする必要があると考えていたでしょう。

誰かが何が起こっているのかを説明し、それを微調整する方法の例をいくつか提供して、すべての単語が存在する説明のランクを上げることができますか?

編集:私も試しました:

isabout("*redflower*", "*red*" weight (.2), "*flower*" weight (.1))

これにより、結果がRed Mason Bee Boxランク 21 とランク 21 に変更されましWildflower Seeds - Red Campionた。2 番目の単語には 1 つだけでなく両方の単語が含まれているため、なぜそうなるのかわかりません。

4

2 に答える 2

1

この加重検索を行う前に、NEAR 演算子を使用するように検索方法を変更します。これにより、最も関連性の高い結果が最初に返されます。

つまり'flower NEAR red'、先頭のワイルドカードを使用できないため、これは実際には私の例では機能しませんが、すべてのフィールドの逆インデックスを作成して、次の"rewolf*" NEAR der'ように変換しますWildflower NEAR red

于 2012-03-06T10:29:39.187 に答える
1

まず、構文での意図は、ランキングを調整するために接尾辞用語 (「*花」) を定義いるようです。ランキング)。しかし、あなたはすでにこれに気づいているようです。

次に、ワード ブレーカーは「Wildflower」を 2 つの単語に分割しません。ワードブレーカーとステマーを適用するときにエンジンが何をしているかを表示できる、便利なテーブル値関数がありますsys.dm_fts_parser

select * from sys.dm_fts_parser('"Wildflower Seeds - Red Campion"', 1033, null, 0)


group_id    phrase_id   occurrence  special_term     display_term    expansion_type source_term
----------- ----------- ----------- ---------------- --------------- -------------- --------------------------------
1           0           1           Exact Match      wildflower      0              Wildflower Seeds - Red Campion
1           0           2           Exact Match      seeds           0              Wildflower Seeds - Red Campion
1           0           3           Exact Match      red             0              Wildflower Seeds - Red Campion
1           0           4           Exact Match      campion         0              Wildflower Seeds - Red Campion

別の解決策は、Flower から Wildflower へのシソーラス拡張を手動で定義することです。

<expansion>
     <sub>flower</sub>
     <sub>wildflower</sub>
</expansion>

しかし、それはこの特定のケースのみを修正します。

于 2012-03-06T10:43:43.290 に答える