2

このようなクエリには複数の条件があります。

SELECT * FROM image WHERE name LIKE '%text%' AND group_id = 10 LIMIT 1

WHEREステートメントは、次の3つの条件で構成されます。

  • テキスト一致
  • 外部キーの一致

結果を関連性で並べ替えたい場合はどうなりますか?

  1. テキストがどの程度正確に一致しているか
  2. どれだけの条件が満たされているか(たとえば、テキストの一致外部キー)

これは1つに2つの質問ですが、これらを組み合わせて使用​​すると便利な場合もあると思います。これによって、私は私の以前の投稿から生じる質問を参照しています(結果が利用可能になるまで複数のSELECTを試す方法は?)。

前もって感謝します!

4

1 に答える 1

6

テキストがどの程度正確に一致しているかを知るには、fuzzystrmatchPostgreSQLモジュールが必要です。これは、2つの文字列間の類似性を推定するための機能を提供しdifferenceます。levenshtein

次に、次のような条件でクエリを作成できます。

    SELECT *
      FROM image
     WHERE name LIKE '%text%' 
       AND ( group_id = 10 
             OR second_field = 4
             OR thirth_field = 5
           )
    ORDER BY ( (group_id=10)::int
               + (second_field=4)::int
               + (thirth_field=5)::int
             ) * weight_1
             + (strlen(name) - levenshtein('text',name)) * weight_2

テキストの距離または満たされる条件の数を調整して優先することができweight_1ますweight_2

于 2013-02-05T12:53:08.510 に答える