FTS (全文检索) sqlite 如何实现 FTS 表?

4

我正在尝试创建一个类似于Android的应用程序,并希望允许快速搜索,因此正在研究针对Android的SQLite的FTS。我知道如何创建它,但是有几个问题:

Table_words - 我的单词表

  1. 如果我创建一个新的FTS表,即Table_words_fts,它会替换table_words吗?还是只是添加另一个表?

  2. 如果作为另一个表添加,我是否可以通过代码将数据同时添加到FTS表和table_words中?

  3. 如果是这样,我是否可以省略一些不必要的列并包含其他不在table_words表中的列?

  4. 如果我只是替换编号1中的表,那么它会影响常规查询吗?

  5. 如果我不需要在新的FTS表中存储数据,那么它只是被添加以便更快地读取表格吗?

到目前为止,我的理解是,它是一个单独的表,我需要通过代码向其中添加数据,并且我可以省略一些列,但不能添加新列。此外,我存储数据的方式与将其添加到其他表中的方式完全相同...

以下是我的工作想法...创建表:

// create FTS tables for quicker matches for search
db.execSQL("CREATE VIRTUAL TABLE " + TABLE_WORDS_FTS + " USING fts3("
    + KEY_ID + ", " + KEY_DICTIONARYID + ", " + KEY_WORD1 + " , "
    + KEY_WORD2 + " , " + KEY_WORD3 + ", " + KEY_WORD4 + " " + ");");
创建常规表格:
// Words table create statement
private static final String CREATE_TABLE_WORDS = "CREATE TABLE "
    + TABLE_WORDS + "(" + KEY_ID + " INTEGER PRIMARY KEY,"
    + KEY_DICTIONARYID + " INTEGER," + KEY_WORD1 + " TEXT," + KEY_WORD2
    + " TEXT," + KEY_WORD3 + " TEXT," + KEY_WORD4 + " TEXT" + ")";
db.execSQL(CREATE_TABLE_WORDS);

接下来我将按照常规方式继续处理...但是回顾一下:是否尝试找出表格是否被额外创建?数据是否也被常规存储在其中?

1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
2
  1. 是的,它像普通表格一样运作,不会替换现有表格。

  2. 是的,你需要将数据单独添加到FTS表中,但如果你想要的话,可以通过触发器来完成。

  3. 是的,你可以有不同的列。

  4. 你没有替换原始表格,因此不会影响那些查询。当然,你可以对FTS表格运行常规查询。

  5. 是的,你可以在其他地方创建一个包含内容的FTS表格;详见Contentless FTS Tables


它到底是什么,没有内容,我读了但很难理解...如果不存储它,它如何精确地读取呢?它是如何工作的? - Lion789
此外,相对于实际拥有行,它有哪些好处? - Lion789
这里的“contentless”意味着只保留倒排索引,而不保留创建索引的原始内容。 - evil otto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,