トリグラム検索は、対象オブジェクトの正確な構文やスペルが正確にわからない場合[ 1 ] 、またはクエリが正規表現である場合[ 2 ]にテキストを検索する方法です。これは、検索語の3文字のサブストリング(つまりトリグラム)に対して最も多く一致するオブジェクトを見つけます。これらは一般的にほぼ一致しています[ 3 ] 。多くの共通のトリグラムを持つ2つの文字列は、非常に似ていると予想されます[ 4 ] 。トリグラムを使用すると、正規表現またはテキストに不完全に一致する検索に対して検索エンジンのインデックスを効率的に作成することもできます。インデックスは検索を大幅に高速化できます[ 5 ] [ 6 ]。結果が一致しなかった後に、トリグラムの一致数のしきい値をカットオフポイントとして指定できます[ 4 ] 。
トリグラムを使用して検索を高速化することは、正規表現のクエリが役立つ状況でコード検索を行うシステムの一部で使用されている手法であり、 [ 5 ] [ 2 ] [ 7 ] Elasticsearchなどの検索エンジン、[ 8 ]およびPostgreSQLなどのデータベースで使用されています。[ 4 ]
文字列「alice」を考えてみましょう。この文字列の3文字の英字は、スペースを除いて「ali」、「lic」、「ice」になります。[ 5 ] 3文字の英字に基づくインデックスを持つデータベースでこの文字列を検索するには、3つの英字をできるだけ多く含むオブジェクトを見つける必要があります。
正規表現クエリの検索にトリグラム検索を使用する具体的な例として、文字列 を検索することを考えてみましょう。ab[cd]eここで、括弧は、検索対象の文字列の 3 番目の文字がcまたは である可能性があることを示しています。この場合、2 つのトリグラムと 、または 2 つのトリグラムとdを持つオブジェクトをインデックスにクエリすることができます。したがって、このクエリを見つけるには の文字列マッチングは必要なく、インデックスを直接クエリするだけで済み、実際にはより高速になる可能性があります。[ 2 ]abcbceabdbde