FTS4 sqlite MATCH查询不起作用(FTS4 sqlite MATCH query not working)

我有一个外部数据库,我使用sqlite 3版本3.13.0与2表这样。

我创建了一个虚拟表:

CREATE VIRTUAL TABLE tb_bank_fts USING fts4 (content="tb_bank",address, typename)

虚拟表创建成功,我可以使用选择。

但是我不能使用fts4表的“匹配”查询,总是返回null而没有错误。

半个月前,我可以用“匹配”查询fts4表,但现在我不能这样做。我不知道为什么。 我尝试在Firefox中使用SQlite Manager插件,但同样的问题。

I have a external database and I use sqlite 3 version 3.13.0 with 2 table like this.

And I create a virtual table:

CREATE VIRTUAL TABLE tb_bank_fts USING fts4 (content="tb_bank",address, typename)

Virtual table create successfull and I can use select.

But I can't use "match" query with fts4 table, alway return null with no error.

Half month ago I can query fts4 table with "match" but now i can't do that.I don't know why. I try using SQlite Manager addon in Firefox but same problem.

原文:https://stackoverflow.com/questions/38298562

更新时间:2019-12-17 05:10

最满意答案

文件说:

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

因此,当您将数据插入基表时,还必须将其插入FTS表:

INSERT INTO tb_bank_fts(docid, address, typename)

SELECT rowid, address, typename FROM tb_bank;

或者干脆:

INSERT INTO tb_bank_fts(tb_bank_fts) VALUES('rebuild');

The FTS4 module never writes to the content table, and writing to the content table does not affect the full-text index. It is the responsibility of the user to ensure that the content table and the full-text index are consistent.

So when you've inserted data into the base table, you also have to insert it into the FTS table:

INSERT INTO tb_bank_fts(docid, address, typename)

SELECT rowid, address, typename FROM tb_bank;

or simply:

INSERT INTO tb_bank_fts(tb_bank_fts) VALUES('rebuild');

2016-07-11

相关问答

MATCH仅适用于FTS表本身,因此必须在连接之前执行。 在第二个查询中,数据库首先查找匹配的行(使用外部联接,在连接顺序中没有选择),并且该临时结果不再是FTS表。 使用FTS时,最好将FTS搜索(或其他搜索)移动到子查询中: SELECT *

FROM Table2 LEFT JOIN (SELECT *

FROM Table1

WHERE Table1 MATCH ...)

U

...

文件中的陈述有些误导; 虚拟表本身不会将数据存储在数据库中,但实现虚拟表的引擎可能会选择使用其他表来存储数据。 FTS的内容在文档的第9.1节中解释: 对于数据库中的每个FTS虚拟表,将创建三到五个真实(非虚拟)表来存储基础数据。 这些真实的表称为“影子表”。 真实表名为“%_content”,“%_ segdir”,“%_segments”,“%_ stat”和“%_docsize”,其中“%”由FTS虚拟表的名称替换。 That statement from the documentation

...

文件说: 当FTS表上的用户查询需要docid以外的列值时,FTS会尝试从内容表中行的相应列读取请求的值,其rowid值等于当前的FTS docid。 因此视图必须包含一个名为rowid的唯一列,该列对应于FTS表的docid 。 The documentation says: When a users query on the FTS table requires a column value other than docid, FTS attempts to read the requeste

...

文件说: FTS4模块从不写入内容表,写入内容表不会影响全文索引。 用户有责任确保内容表和全文索引一致。 因此,当您将数据插入基表时,还必须将其插入FTS表: INSERT INTO tb_bank_fts(docid, address, typename)

SELECT rowid, address, typename FROM tb_bank;

或者干脆: INSERT INTO tb_bank_fts(tb_bank_fts) VALUES('rebuild');

The documen

...

该ODBC驱动程序是在没有FTS的情况下编译的。 您必须使用System.Data.SQLite,或使用更改的配置重新编译ODBC驱动程序。 That ODBC driver has been compiled without FTS. You have to use System.Data.SQLite, or to recompile the ODBC driver with a changed configuration.

仅在表具有至少一行时,在普通表上使用MATCH才会生成错误消息。 FTS表有一个与表名同名的虚拟列。 所以你可以尝试像SELECT MyTable FROM MyTable这样的查询。 您可以检查是否存在影子表 ( MyTable_content , MyTable_segdir等)。 您可以检查系统表中的CREATE TABLE语句: SELECT sql FROM sqlite_master WHERE type = 'table' AND name = 'MyTable'; Using MA

...

FTS表具有名为docid或rowid的内部INTEGER PRIMARY KEY列。 在FTS表中插入一行时,将该列设置为原始表中该行的主键。 然后,您可以使用单独的查询或使用如下连接轻松查找相应的行: SELECT *

FROM t2

WHERE id IN (SELECT docid

FROM fts_table

WHERE col_text MATCH 'something')

FTS tables have an internal I

...

索引对于根据索引列的值查找表行非常有用。 找到表行后,索引不再有用,因为通过任何其他标准查找索引中的表行效率不高。 这意味着不可能为查询中访问的每个表使用多个索引 。 另请参阅文档: 查询计划 , 查询优化程序 。 您的第一个查询具有以下EXPLAIN QUERY PLAN输出: 0 0 0 SCAN TABLE MessageSearchTable VIRTUAL TABLE INDEX 4: (~0 rows)

0 1 1 SEARCH TABLE MessageTable USING INT

...

文档中的示例使用增强的查询语法 。 检查PRAGMA compile_options; 包括ENABLE_FTS3_PARENTHESIS 。 您的NEAR查询不起作用不是编译选项的问题: > SELECT * FROM docs WHERE docs MATCH '(database OR sqlite) NEAR/5 system';

Error: malformed MATCH expression: [(database OR sqlite) NEAR/5 system]

问题在于,根据

...

你试过重建你的sqlite3 gem吗? 这对我有用。 Have you tried rebuilding your sqlite3 gem? That did the trick for me.

android sqlite fts4,FTS4 sqlite MATCH查询不起作用(FTS4 sqlite MATCH query not working)相关推荐

  1. Android studio 83 数据库插入、查询、更新、删除 sqlite

    activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout ...

  2. Android Sqlite数据库多表联合查询

    Android Sqlite数据库多表联合查询示例 工作上用数据库存储文件还是很便利的,所以有时候发现一张表存储数据感觉数据结构不是很清晰的时候,就需要新加第二张表或者多张表来进行联合查询对象信,一般 ...

  3. android餐厅菜单功能,基于安卓Android平台餐馆点餐订餐系统的设计与实现(SQLite)...

    基于安卓Android平台餐馆点餐订餐系统的设计与实现(SQLite)(毕业论文18000字,程序代码,SQLite数据库) 本课题是基于android(安卓)平台开发的,作为餐饮业点餐使用的一个工具 ...

  4. android 创建文件夹_Android安全(四)数据库 之 SQLite数据库

    每个应用程序都要使用数据,Android应用程序也不例外,Android使用开源的.与操作系统无关的SQL数据库-SQLite.SQLite第一个Alpha版本诞生于2000年5月,它是一款轻量级数据 ...

  5. es java match_ES multi_match 和match查询

    multi_match查询默认为best_fields类型,更适合变形的查询句子. multi_match的most_fields类型查询 { "query": { "m ...

  6. [Elasticsearch] 全文搜索 (一) - 基础概念和match查询

    全文搜索(Full Text Search) 现在我们已经讨论了搜索结构化数据的一些简单用例,是时候开始探索全文搜索了 - 如何在全文字段中搜索来找到最相关的文档. 对于全文搜索而言,最重要的两个方面 ...

  7. 04.full_text match查询

    文章目录 1. match query 简介 2. 简写方式 3. 查询工作原理 4. match查询中的fuzzniess 1. Levenshtein Edit Distance 2. fuzzi ...

  8. term和match查询总结(中文检索)

    es中的查询请求有两种方式,一种是简易版的查询,另外一种是使用JSON完整的请求体,叫做结构化查询(DSL). 由于DSL查询更为直观也更为简易,所以大都使用这种方式. DSL查询是POST过去一个j ...

  9. elasticsearch基本查询三(英文分词)match查询

    #match查询 #match query知道分词器的存在,会对filed进行分词操作, 然后再查询 GET /ib3/user/_search { "query":{ " ...

最新文章

  1. python scrapy菜鸟教程_scrapy学习笔记(一)快速入门
  2. 四年上册级计算机教学计划,小学数学四年级上册教学计划
  3. NeurIPS 2020 | 微软亚洲研究院论文摘录之强化学习GAN篇
  4. 古典加密算法-----置换密码
  5. 不知因果,何以谈优化?
  6. python-day01
  7. boost::lockfree::queue用法的测试程序
  8. 数值方法:偏微分方程
  9. 深刻理解数据库外键含义
  10. java flv转mp3_【转载】音频视频转化工具JAVE(ffmpeg的Java封装)
  11. Cray:XC50提供了最高密度的性能
  12. 【转贴】谈论 Direct3D10特性预览
  13. vfp中写入文本文件_VFP中操作多种文件
  14. web开发中实现页面记忆的几种方式
  15. 燕大学子知网使用手册
  16. echarts堆叠柱状图上显示数字_echarts堆叠柱状图在柱子上方显示总数
  17. php计算1000000以内的质数,1000000以内质数表
  18. 2022陕西省安全员B证操作证考试题库及模拟考试
  19. sparksql中shuffled hash join策略
  20. 专业的人做专业的事 VxRail助中通业务创新驶上“快车道”

热门文章

  1. Serverless 底座的持续创新
  2. 几何画板绘制三棱锥的教程
  3. 大数据平台下的数据治理
  4. 节后轻生折射老人“空巢”之痛
  5. Microsoft365 PowerPoint找不到设计灵感design ideas、历史版本记录、自动保存不见了
  6. STC8单片机1T模式跑RTX51
  7. sja1000 c语言,CAN总线控制器SJA1000源程序(c语言).doc
  8. 按键精灵---句柄的介绍及获取
  9. 如何写好科研论文 (第二章习题 Quiz 2)
  10. 奇妙的AE特效插件之红巨人粒子特效Trapcode Suite