この情報はoffsets
補助機能を介して取得できるようです。より完全なドキュメントへのリンクは次のとおりです。
4.1. オフセット機能
基本的に、関数をクエリに追加すると、ドキュメント内のオフセットが返されます。
SELECT offsets(data) FROM data ...
各結果は、スペースで区切られた 4 つの整数のリストです。3 番目の列は、列内の一致する用語のバイト オフセットです。その情報を使用してソリューションを作成できるはずです。
これは、いくつかの探索的クエリのトランスクリプトです。
sqlite> create virtual table data using fts4(body);
sqlite> insert into data(body)
values('the quick brown fox jumps over the lazy dog');
sqlite> insert into data(body)
values('the lazy brown fox quickly jumps over the lazy dog');
sqlite> select * from data where body match 'lazy';
the quick brown fox jumps over the lazy dog
the lazy brown fox quickly jumps over the lazy dog
sqlite> select rowid,offsets(data) from data where body match 'brown';
1|0 0 10 5
2|0 0 9 5
sqlite> select rowid,offsets(data) from data where body match 'lazy';
1|0 0 35 4
2|0 0 4 4 0 0 42 4
したがって、brown vs lazy を検索する場合、これらのドキュメントは両方とも一致します。
最初のドキュメントでは、茶色は 10 で、レイジーは 35 です。それらは 25 離れています。
2 番目の文書では、茶色は 9 で、レイジーは 4 と 42 です。これらは 5 と 33 離れています。
また、述語の用語の順序も参照しますが、同じクエリで 2 つの用語を照合しようとすると機能しません。誤解しているのか、それとも正しいセマンティクスを知らないだけなのかはわかりません。
sqlite 内ですべてのランキング計算を行うために使用できる SQL ピボットの悪ふざけがいくつかあると思います。sqlite から結果を取得し、自分でランキング計算を行う方が、おそらくより保守しやすいでしょう。