看起来您可以通过offsets
辅助功能获取此信息。以下是更完整文档的链接:
4.1。偏移功能
基本上,您将函数添加到查询中,它将返回文档中的偏移量。
SELECT offsets(data) FROM data ...
每个结果都是一个空格分隔的 4 个整数列表。第三列是该列中匹配项的字节偏移量。您应该能够使用该信息制定解决方案。
这是一些探索性查询的记录。
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 与 lazy,这两个文档都匹配。
对于第一个文档,brown 为 10,lazy 为 35。它们相距 25。
对于第二个文档,brown 位于 9,lazy 位于 4 和 42。它们相距 5 和 33。
它们还引用谓词的术语排序,尽管当我尝试匹配同一查询中的两个术语时它不起作用。我不确定我是否误解了,或者我只是不知道正确的语义。
我怀疑有一些 SQL 枢轴恶作剧可以用来在 sqlite 中进行所有排名计算。从 sqlite 中获取结果并自己进行排名数学可能更易于维护。