文書の類似度を計算する方法に「コサイン類似度」を用いる方法があります。 これは、出現する単語を出現回数などで数値化して、空間ベクトルに変換した上でベクトル同士の類似度を計算する、という手法です。 コサイン類似度 http://www.cse.kyoto-su.ac.jp/~g0846020/keywords/cosinSimilarity.html 最近、このコサイン類似度を使って、似ているデータを検索するWebアプリを試しに作っていたのですが、ふと、 「このコサイン類似度を使ったソート処理をPostgreSQLでどのように実装するともっとも高速な実装になるのだろうか。また、現実的なパフォーマンスを考えた時にデータ量や次元のサイズはどこまで増やせるのだろうか」 ということが気になりました。 PostgreSQLは、その拡張性の高さがウリの一つですが、そのため「UDFを作る」ということを考え
![コサイン類似度に基づくソート処理の実装方法とその性能比較](https://cdn-ak-scissors.b.st-hatena.com/image/square/6a532ff0317d8c48dcb075d5d0ec755c3fbcc9b7/height=288;version=1;width=512/https%3A%2F%2Fblogger.googleusercontent.com%2Fimg%2Fb%2FR29vZ2xl%2FAVvXsEg4PvMhoPajGUX4-l33Yp-6RoWCXxSq5qqR-EL7IiznKyXbqJex26DrdC97kf5N0M8ULbRHavUX3_KXUKJAZDspHGn-6LkJa0YgeisXiywdCzQOG3tMyZLk-AQpO60SGPrn__tFpRD7F0k%2Fw1200-h630-p-k-no-nu%2F0.png)