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

时间:2014-02-08 00:11:29

标签: sql sqlite fts3

我正在尝试创建一个类似Android的应用程序,并希望允许快速搜索,所以正在研究用于Android的sqlite的FTS。我知道如何创建它,但想知道几件事:

Table_words - 我的单词表

  1. 如果我创建一个新的FTS表,即Table_words_fts - 它是否替换table_words,它是否仅作为另一个表添加?

  2. 如果作为另一个表添加,我是否同时将数据添加到FTS表中,就像我通过我的代码对table_words一样?

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

  4. 如果我只是替换数字1中的表格,那会影响常规查询吗?

  5. 如果我没有替换它,但不需要在新的FTS表中存储数据,那么它是否只是为了能够更快地读取表格而被添加?

  6. 我到目前为止的理解如下,它是一个单独的表,添加我在整个代码中添加数据,我可以省略一些列但不添加新列。此外,我存储数据的方式与将其添加到其他表格的方式完全相同...

    这是我使用它的想法...... 创建表:

    // 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);
    

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

1 个答案:

答案 0 :(得分:2)

  1. 是的,它就像一张普通的桌子,它不会取代现有的桌子。

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

  3. 是的,您可以使用不同的列。

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

  5. 是的,您可以创建一个包含其他内容的FTS表;有关详细信息,请参阅Contentless FTS Tables