Example #1
0
        public void CJKTokenizerTest()
        {
            CJKTokenizer tokenizer = new CJKTokenizer();
            string       text      = "SQLiteFtsTokenizer 只有在 PrepareToStart 方法时才能取得要切分的字符串。";
            var          result    = tokenizer.TestMe(text);

            Assert.IsNotNull(result);
        }
Example #2
0
        public void SqliteTest()
        {
            //注意:
            // SQLiteFtsTokenizer 只有在 PrepareToStart 方法时才能取得要切分的字符串。
            // Lucene 的 Tokenizer 支持实例化后、通过 Reset 方法指定要切分的字符串;
            // 而 TokenFilter 不支持,必须在实例化时才能指定。
            //
            // 第一个例子用事件方式解决这一矛盾,支持 TokenStream(包括 TokenFilter 和 Tokenizer)。
            // 第二个例子不用事件,只支持 Tokenizer,使用相对方便些。
            // 可以根据需要调整。

            //使用示例:
            using (SQLiteConnection connection = new SQLiteConnection("Data Source=test.db"))
            {
                CJKTokenizer tokenizer = new CJKTokenizer();
                connection.Open();
                tokenizer.RegisterMe(connection); //注册切词器

                //建表
                SQLiteCommand cmd = new SQLiteCommand(connection);
                cmd.CommandText = "CREATE VIRTUAL TABLE docs USING fts3(title, content, tokenize=cjk)";
                cmd.ExecuteNonQuery();

                //插入数据
                cmd.CommandText = "INSERT INTO docs (title, content) VALUES (?, ?)";
                SQLiteParameter p1 = new SQLiteParameter();
                p1.DbType = System.Data.DbType.String;
                p1.Value  = "测试标题";
                cmd.Parameters.Add(p1);
                SQLiteParameter p2 = new SQLiteParameter();
                p2.DbType = System.Data.DbType.String;
                p2.Value  = "测试内容";
                cmd.Parameters.Add(p2);
                cmd.ExecuteNonQuery();

                //检索
                cmd.CommandText = "SELECT docid, title, content FROM docs WHERE docs MATCH '测试'";
                SQLiteDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                }
                dr.Close();

                connection.Close();
            }
        }