【问题标题】:Sqlite full text search keyword 'Match' not returning any resultSqlite 全文搜索关键字“匹配”未返回任何结果
【发布时间】:2017-06-09 04:46:01
【问题描述】:

我正在使用fts4sqlite 上处理full text search

在我的数据库中,我有一个普通表 Notes,它包含 33 records

我像这样使用fts4 创建了一个虚拟表

CREATE VIRTUAL TABLE t3 USING fts4(content="Notes", user_notes);

我是这样查询的

SELECT user_notes FROM t3 WHERE user_notes MATCH 'important'

还有这个

SELECT user_notes FROM t3 WHERE t3 MATCH 'important'

但是没有一个查询有效,为什么?我得到空结果没有错误。

【问题讨论】:

  • 您得到一个空结果,因为没有匹配的行。
  • @CL。请告诉我如何不匹配此查询中的行 SELECT user_notes FROM t3 WHERE user_notes MATCH 'important' ..... user_note 是行.....
  • 第几行?你为什么假设有一个匹配的行?
  • @CL。是的,在我的行 user_note 我有“重要”字,那为什么它不匹配
  • 显示该行(使用 SELECT 或插入它的代码)。

标签: sql sqlite full-text-search fts4


【解决方案1】:

您是否尝试过使用“LIKE”运算符?

SELECT user_notes FROM t3 WHERE user_notes LIKE'%important%'

【讨论】:

    【解决方案2】:

    documentation 说:

    FTS4 模块从不写入内容表,写入内容表不会影响全文索引。确保内容表和全文索引一致是用户的责任。

    所以当你插入Notes表时,你也必须插入t3表。 (如果实际表已经填满,请使用rebuild FTS 命令。)

    【讨论】:

    • 使用 fts4(content="Notes", user_notes) 创建虚拟表 t3;在这个查询之后,当我像这样选择 SELECT * FROM t3 我可以看到所有记录,我没有明确插入任何记录,那么为什么它显示所有记录?
    • 因为它没有使用索引(这是外部内容表的重点)。
    • 表示在此之后 CREATE VIRTUAL TABLE t3 USING fts4(content="Notes", user_notes);我必须在 t3 中插入​​数据,然后匹配关键字才能工作?
    猜你喜欢
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多