次のスキーマを持つドキュメントのテーブルがあります。
CREATE TABLE Frequency (
docid VARCHAR(255),
term VARCHAR(255),
count int,
PRIMARY KEY(docid, term));
すべてのドキュメントの類似性生スコアを見つけるには、次を使用します。
SELECT a.term, b.term, sum(a.count * b.count)
FROM Frequency a, Frequency b
Where a.term = b.term
なぜこれが機能するのかはわかりませんが、テスト データで D*DT を実行しました。ここで、DT は D の転置です。
「議会銃法」のような用語のクエリ/テキスト文字列の類似性を計算する必要があります
これにはユニオンとグループ化が含まれると思いますが、クエリの試行はすべて失敗します。
SELECT *
FROM Frequency a, Frequency b, Frequency c
Where a.term = b.term
UNION
SELECT a.docid, 'congress' as term, 1 as count
UNION
SELECT b.docid , 'gun' as term, 1 as count
UNION
SELECT c.docid , 'laws' as term, 1 as count
Group by docid;
私はこの種の SQL に慣れていないので、私が何をしているのかを理解しようとしているので、物語をいただければ幸いです。
最初のクエリが機能する理由と、2 番目のクエリにどのようにアプローチできるかを説明してください。