问题标签 [fts4]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
48 浏览

android - 在@FTS4 Room 数据库中设置唯一索引会导致构建错误

我试图通过定义索引使我的 Room 数据库的一列独一无二。但是,这导致我的编译器失败,因为它大大增加了所需的对象堆。

如果我使用@Entity(tableName = "seeds", indices = {@Index(value = {"name"}, unique = true)}) @Fts4

运行“gradlew build --stacktrace”时出现编译器错误:

如果我只使用@Entity(tableName = "seeds") @Fts4,应用程序会正确编译。

我在我的gradle.properties...中尝试了不同的设置

org.gradle.jvmargs=-Xmx3g是我能给它的最大价值。在4g它抱怨该值超过了允许的最大值。因此,所有其他关于此的 SO 线程都没有帮助,因为我已经达到了最大值。我通常在2g. 所以这个“小”的变化似乎使所需的对象堆增加了一倍。

有谁知道处理唯一索引的更好方法?

有谁知道如何解决这个级别的对象堆问题?

0 投票
0 回答
32 浏览

sql - 查询以选择接下来的几行

我正在开发一个搜索工具,首先我使用 FTS4 和 sqlite 搜索数据库(大约 450k 行),这些词(要搜索)在对象数组中。这工作得很快,我使用的 SQL 是:

String s = "select * from fts_sggs where word_text MATCH ? ";

但是,我需要一些额外的单词,它们是同一张表的一部分。FTS4 似乎在这里不起作用。sql 是

String s ="select * from fts_sggs where word_number BETWEEN " + wordnumlo + " AND " + wordnumhi + " and page_number =" + pgnum;

我是 SQL 编程的新手,我需要一个可以快速执行这两项任务的查询。这是在非常慢的java中完成的。

0 投票
0 回答
150 浏览

python - “OperationalError: no such module: fts4” in Python3.8 using Anaconda3 Spyder 4.2.5

我正在尝试运行模糊匹配器。但是遇到问题

OperationalError:没有这样的模块:fts4

我使用了其他帖子中推荐的扩展

这似乎不能解决问题。我的结果是

编译器=msvc-1916
ENABLE_COLUMN_METADATA
ENABLE_FTS5
ENABLE_GEOPOLY
ENABLE_JSON1
ENABLE_RTREE
MAX_VARIABLE_NUMBER=250000
THREADSAFE=1

系统路径

在 [16]: sys.path
Out[16]:
['C:\Users\anaconda3\python38.zip',
'C:\Users\anaconda3\DLLs',
'C:\Users\anaconda3\lib',
' C:\Users\anaconda3'、
''、
'C:\Users\anaconda3\lib\site-packages'、
'C:\Users\anaconda3\lib\site-packages\locket-0.2.1-py3.8。鸡蛋'、
'C:\Users\anaconda3\lib\site-packages\win32'、
'C:\Users\anaconda3\lib\site-packages\win32\lib'、
'C:\Users\anaconda3\lib\site -packages\Pythonwin'、
'C:\Users\anaconda3\lib\site-packages\IPython\extensions'、
'C:\Users\.ipython'、
'd:\1. 研究\python\apsw-3.33.0-r1']

非常感谢任何解决此问题的帮助。谢谢你。

0 投票
1 回答
79 浏览

java - 使用 FTS4 在房间数据库中将“rowid”从 Long 更改为 Int

我正在使用新的库版本更新我的应用程序,但我的数据库出现问题。已发布的应用程序当前使用带有 FTS4 的 Room 版本 2.2.6。目前有 LONG for rowid. 该应用程序运行流畅,没有问题。但我想使用 Room 2.3.0 版并根据文档:

FTS 实体表始终有一个名为 rowid 的列,它等效于 INTEGER PRIMARY KEY 索引。因此,一个 FTS 实体只能有一个使用 PrimaryKey 注释的字段,它必须命名为 rowid 并且必须是 INTEGER 亲和性。该字段可以在类中选择性地省略,但仍可在查询中使用。

我应该使用 INT 而不是 LONG。

有没有办法在不破坏用户数据的情况下更新属性?

0 投票
0 回答
16 浏览

sqlite - 如果 * 添加为标记字符,则 FTS 不起作用

我需要启用 FTS 搜索“-”和“*”。所以我将它们配置为令牌字符,如下所示:

它插入了一条记录:

当我选择匹配的查询时它不起作用(返回空记录)

如果我从table create 命令的tokenchars中删除 * 。上面的选择查询返回数据。好像不喜欢 *

请帮忙。

0 投票
0 回答
22 浏览

sqlite - Sqlite FTS4:更改现有表的标记器

我有一个使用简单标记器创建的 FTS4 表。我想更改标记器并重新索引表。

有没有办法改变标记器并用最少的代码重新索引?

我正在考虑的另一个选项是删除表,使用新的标记器重新创建它,然后插入数据。

0 投票
1 回答
56 浏览

android - Android Room FTS4 如何删除自动创建的触发器

我可以控制由 Android Room 自动创建的“插入/更新/删除”触发器,以在内容和虚拟表之间同步数据。我可以删除不需要的更新触发器吗?

我使用 Android Room 创建了带有外部内容的虚拟表。

内容(正常)表Person

PersonFTS带有内容表的 FTS虚拟表Person

现在,Android Room 已经创建了 4 个触发器来保持数据之间PersonPersonFTS自动同步。这是PersonDatabase_Impl由Android生成的:

virtual table如果有任何更新,我想避免更新数据content table,所以我需要删除带有名称room_fts_content_sync_person_fts_BEFORE_UPDATEroom_fts_content_sync_person_fts_AFTER_UPDATE. 仅需要 INSERT 和 DELETE 操作的触发器。

Android Room 是否提供这种可能性?

0 投票
1 回答
84 浏览

sqlite - SQLite FTS5 Match 什么也不返回

我有一个 SQLite3 表:

我在其中插入任何内容:

然后我创建一个 FTS5 虚拟表:

所以我检查虚拟表中的数据:

截屏

一切似乎都很好......现在我尝试使用MATCH来查找文章:

...我没有得到任何结果。显然我展示的这个数据库只是一个例子,实际数据库也会发生同样的事情。我在不同的计算机(和不同的客户端)上尝试过,我还检查了 FTS5 是否已启用并在其中编译,PRAGMA compile_options并且ENABLE_FTS5是否存在,这意味着它已启用。FTS3 和 4 也会发生同样的情况。

那么我错过了什么?SQLite 版本是 3.36.0。