我正在尝试创建一个类似 android 的应用程序,并希望允许快速搜索,因此正在寻找适用于 Android 的 sqlite 的 FTS。我看到了如何创建它,但想知道一些事情:

Table_words - 我的单词表

  • 如果我创建了一个新的 FTS 表,即 Table_words_fts - 它是否替换了 table_words,它是否只是作为另一个表添加的?
  • 如果添加为另一个表,我是否会像通过代码添加到 table_words 一样将数据同时添加到 FTS 表中?
  • 如果是这样,我可以省略一些不必要的列,并包含 table_words 表中没有的其他列吗?
  • 如果我只是替换数字 1 中的表,那么它会影响常规查询吗?
  • 如果我不替换它,但不需要将数据存储在新的 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);
    

    其余的我将按照常规方式进行...但回顾一下:试图弄清楚该表是否是在表之外创建的?如果数据也定期存储在其中?

    最佳答案

  • 是的,它就像一个普通的表,它不会替换现有的表。
  • 是的,您需要将数据单独添加到 FTS 表中,但如果您愿意,也可以通过触发器来实现。
  • 是的,您可以有不同的列。
  • 您没有替换原始表,因此不会影响那些查询。当然,您可以对 FTS 表运行常规查询。
  • 是的,您可以在其他地方创建包含内容的 FTS 表;有关详细信息,请参阅 Contentless FTS Tables
  • 关于sql - FTS (Full Text Search) sqlite 如何实现 FTS Table?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21640064/

    10-12 02:43