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

Postgresqlで句読点のある単語をSQLクエリするにはどうすればよいですか?

    tsvector

    tsvectorを使用します タイプ。これはPostgreSQLのテキスト検索機能の一部です。

    postgres> select 'What are Q-type Operations?'::tsvector;
                  tsvector               
    -------------------------------------
     'Operations?' 'Q-type' 'What' 'are'
    (1 row)
    

    tsvectorでもおなじみの演算子を使用できます:

    postgres> select 'What are Q-type Operations?'::tsvector
    postgres>        || 'A.B.C''s of Coding'::tsvector;
                               ?column?                           
    --------------------------------------------------------------
     'A.B.C''s' 'Coding' 'Operations?' 'Q-type' 'What' 'are' 'of'
    

    tsvectorドキュメントから:

    一般的な単語(「the」、「a」など)の削除や乗算など、言語固有の正規化も行う場合は、to_tsvectorを使用します。 関数。また、テキスト検索用にさまざまな単語に重みを割り当てます:

    postgres> select to_tsvector('english',
    postgres> 'What are Q-type Operations? A.B.C''s of Coding');
                          to_tsvector                       
    --------------------------------------------------------
     'a.b.c':7 'code':10 'oper':6 'q':4 'q-type':3 'type':5
    (1 row)
    

    本格的なテキスト検索

    明らかに、クエリのすべての行に対してこれを行うとコストがかかるため、tsvectorを別の列に格納し、ts_query()を使用して検索する必要があります。これにより、tsvectorにGiSTインデックスを作成することもできます。

    postgres> insert into text (phrase, tsvec)
    postgres>   values('What are Q-type Operations?',
    postgres>   to_tsvector('english', 'What are Q-type Operations?'));
    INSERT 0 1
    

    検索は、tsqueryと@@演算子を使用して行われます:

    postgres> select phrase from text where tsvec @@ to_tsquery('q-type');
               phrase            
    -----------------------------
     What are Q-type Operations?
    (1 row)
    


    1. 重複エントリのクリーンアップ更新

    2. mySQL-utf8(英語以外)データへのラテン語(英語)フォーム入力のマッチング

    3. plsql開発者で3つ以上の列を連結する方法は?

    4. 空の文字列をoracleClobに更新する方法