sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQL:特定の文に最も近い文を検索します

    全文検索(FTS)

    plainto_tsquery()を使用できます to(ドキュメントごと )...

    SELECT plainto_tsquery('english', 'Sentence: with irrelevant words (and punctuation) in it.')
    
     plainto_tsquery
    ------------------
     'sentenc' & 'irrelev' & 'word' & 'punctuat'
    

    次のように使用します:

    SELECT *
    FROM   tbl
    WHERE  to_tsvector('english', sentence) @@ plainto_tsquery('english', 'My new sentence');
    

    しかし、それでもかなり厳格であり、類似性に対する許容範囲は非常に限られています。

    トリグラムの類似性

    類似性の検索に適している可能性があります 、タイプミスもある程度克服します。

    追加モジュール pg_trgmをインストールします 、GiSTインデックスを作成し、類似性演算子<を使用します。コード>% 最近傍検索で :

    基本的に、にトリグラムGiSTインデックスを使用します :

    -- SELECT set_limit(0.3);  -- adjust tolerance if needed
    
    SELECT *
    FROM   tbl
    WHERE  sentence % 'My new sentence'
    ORDER  BY sentence <-> 'My new sentence'
    LIMIT  10;
    

    詳細:

    両方を組み合わせる

    FTSとトリグラムの類似性を組み合わせることもできます:



    1. sp_reset_connectionは何をしますか?

    2. 同じIDのMySQLSUM

    3. ExcelからOracleデータベースにデータを直接挿入する方法

    4. 不足している日付を SQL に追加する方法のクエリ