android sqlite fts4,FTS4 sqlite MATCH查询不起作用(FTS4 sqlite MATCH query not working)
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)相关推荐
- Android studio 83 数据库插入、查询、更新、删除 sqlite
activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout ...
- Android Sqlite数据库多表联合查询
Android Sqlite数据库多表联合查询示例 工作上用数据库存储文件还是很便利的,所以有时候发现一张表存储数据感觉数据结构不是很清晰的时候,就需要新加第二张表或者多张表来进行联合查询对象信,一般 ...
- android餐厅菜单功能,基于安卓Android平台餐馆点餐订餐系统的设计与实现(SQLite)...
基于安卓Android平台餐馆点餐订餐系统的设计与实现(SQLite)(毕业论文18000字,程序代码,SQLite数据库) 本课题是基于android(安卓)平台开发的,作为餐饮业点餐使用的一个工具 ...
- android 创建文件夹_Android安全(四)数据库 之 SQLite数据库
每个应用程序都要使用数据,Android应用程序也不例外,Android使用开源的.与操作系统无关的SQL数据库-SQLite.SQLite第一个Alpha版本诞生于2000年5月,它是一款轻量级数据 ...
- es java match_ES multi_match 和match查询
multi_match查询默认为best_fields类型,更适合变形的查询句子. multi_match的most_fields类型查询 { "query": { "m ...
- [Elasticsearch] 全文搜索 (一) - 基础概念和match查询
全文搜索(Full Text Search) 现在我们已经讨论了搜索结构化数据的一些简单用例,是时候开始探索全文搜索了 - 如何在全文字段中搜索来找到最相关的文档. 对于全文搜索而言,最重要的两个方面 ...
- 04.full_text match查询
文章目录 1. match query 简介 2. 简写方式 3. 查询工作原理 4. match查询中的fuzzniess 1. Levenshtein Edit Distance 2. fuzzi ...
- term和match查询总结(中文检索)
es中的查询请求有两种方式,一种是简易版的查询,另外一种是使用JSON完整的请求体,叫做结构化查询(DSL). 由于DSL查询更为直观也更为简易,所以大都使用这种方式. DSL查询是POST过去一个j ...
- elasticsearch基本查询三(英文分词)match查询
#match查询 #match query知道分词器的存在,会对filed进行分词操作, 然后再查询 GET /ib3/user/_search { "query":{ " ...
最新文章
- python scrapy菜鸟教程_scrapy学习笔记(一)快速入门
- 四年上册级计算机教学计划,小学数学四年级上册教学计划
- NeurIPS 2020 | 微软亚洲研究院论文摘录之强化学习GAN篇
- 古典加密算法-----置换密码
- 不知因果,何以谈优化?
- python-day01
- boost::lockfree::queue用法的测试程序
- 数值方法:偏微分方程
- 深刻理解数据库外键含义
- java flv转mp3_【转载】音频视频转化工具JAVE(ffmpeg的Java封装)
- Cray:XC50提供了最高密度的性能
- 【转贴】谈论 Direct3D10特性预览
- vfp中写入文本文件_VFP中操作多种文件
- web开发中实现页面记忆的几种方式
- 燕大学子知网使用手册
- echarts堆叠柱状图上显示数字_echarts堆叠柱状图在柱子上方显示总数
- php计算1000000以内的质数,1000000以内质数表
- 2022陕西省安全员B证操作证考试题库及模拟考试
- sparksql中shuffled hash join策略
- 专业的人做专业的事 VxRail助中通业务创新驶上“快车道”
热门文章
- Serverless 底座的持续创新
- 几何画板绘制三棱锥的教程
- 大数据平台下的数据治理
- 节后轻生折射老人“空巢”之痛
- Microsoft365 PowerPoint找不到设计灵感design ideas、历史版本记录、自动保存不见了
- STC8单片机1T模式跑RTX51
- sja1000 c语言,CAN总线控制器SJA1000源程序(c语言).doc
- 按键精灵---句柄的介绍及获取
- 如何写好科研论文 (第二章习题 Quiz 2)
- 奇妙的AE特效插件之红巨人粒子特效Trapcode Suite