相关疑难解决方法(0)

97
推荐指数
4
解决办法
8万
查看次数

SQLite3 FTS4,MATCH和Android

是否在Android版本中启用了SQLite3 FTS4?

sqlite android full-text-search

11
推荐指数
1
解决办法
4981
查看次数

Android全文搜索

Android是否有办法进行全文搜索

我知道甚至不可能通过笔记字段搜索联系人,谷歌是搜索公司,但如果没有API,我会感到失望.

android full-text-search

7
推荐指数
1
解决办法
1万
查看次数

Android搜索:使用FTS表和普通的SQLite数据库表

这更像是一个设计问题 - 而不仅仅是编码问题.

我已经有一个应用程序,可以在SQLite数据库表中存储数据.现在我想在此添加搜索功能.

据我所知,为了启用搜索功能,我需要FTS表.

我拥有的表格(不完全相同,但给出了非常相似的例子):

内容表 - 包含以下列:Id,标题,内容,创建者,创建者,更改者,更改者等...

评论表 - 包含以下列:Id,评论,创建者,创建者,回复等...

其他表格,如用户数据,元数据,类别,标签等.

在这里,我只想要标题,内容和评论的搜索功能.显然我不需要像其他列那样的搜索功能.

哪个是最好的选择?

  1. 我应该丢弃旧表并仅创建FTS表吗?
  2. 我应该继续使用旧表并创建仅支持搜索功能的新FTS表.

我在选项1中看到的问题是:

  • 这是一次颠覆性的变革!
  • 我有一组包含许多非文本列的多个表,我不打算在其中执行搜索.如何在FTS中对它们进行建模?
  • 现在我正在使用像Join等RDBMS的功能,如果我完全切换到FTS表,我认为我无法做到这一点!

我在选项2中看到的问题是:

  • 它将导致重复的表 - 并将消耗更多的内存/空间!
  • 每次我在SQL表中插入/更新/修改一个条目时,我都必须在FTS表中进行相同的更改.

那么,最好的选择是什么?有任何机构面临类似的挑战吗?

sqlite android full-text-search

7
推荐指数
1
解决办法
2936
查看次数

Android 中使用 Sqlite 全文搜索对非英文字符的 Unicode 支持

滚动到最后跳过解释。

背景

在我的 Android 应用程序中,我想使用非英语 Unicode 文本字符串来搜索存储在 SQLite 数据库中的文本文档/字段中的匹配项。我了解到(所以我认为)我需要做的是使用 fts3/fts4实现全文搜索,这就是我过去几天一直在学习的内容。Android 支持 FTS,如文档存储和搜索数据和博客文章Android 快速提示:使用 SQLite FTS 表中所示

问题

一切看起来都不错,但后来我阅读了 2012 年 3 月的博客文章Android 上 SQLite 全文搜索的遗憾状态,其中说

构建全文搜索索引的第一步是将文本内容分解为单词,也就是标记。然后将这些标记输入一个特殊的索引,让 SQLite 基于一个标记(或一组标记)执行非常快速的搜索。

SQLite 有两个内置的标记器,它们都只考虑由美国 ASCII 字符组成的标记。所有其他非美国 ASCII 字符都被视为空格。

之后,我还找到了@CL 的这个 StackOverflow 答案(根据标签和声誉,他似乎是 SQLite 专家)回答有关将越南字母与不同变音符号匹配的问题:

您必须使用可以处理 Unicode 字符(即 ICU 或 UNICODE61)的标记器创建 FTS 表。

请注意,这些分词器可能并非在所有 Android 版本上都可用,并且 Android API 不会公开任何用于添加用户定义的分词器的函数。

这个 2011 SO answer似乎证实了 Android 不支持超出两个基本simpleporter …

sqlite unicode android full-text-search

7
推荐指数
2
解决办法
3526
查看次数

无论如何在Android平台的SQlite中实现全文搜索(FTS)?

我正在尝试创建一个收集用户大量笔记的应用程序.我想在笔记上实现全文搜索,以便用户可以从整个笔记列中获得相关的笔记.我正在为此寻找解决方案.SQLite实际上支持全文搜索(FTS),但它是否适用于Android?有人可以开导我这个吗?

database sqlite search android

6
推荐指数
1
解决办法
3517
查看次数

如何查询外部内容FTS4表,但返回原始内容表中的其他列

我在SQLite中创建一个FTS4外部内容表,如下所示:

CREATE TABLE t2(id INTEGER PRIMARY KEY, col_a, col_b, col_text);
CREATE VIRTUAL TABLE fts_table USING fts4(content="t2", col_text);
Run Code Online (Sandbox Code Playgroud)

我使用的是外部内容表,以便我并不需要存储的重复值col_textfts_table.我只是索引col_text因为col_a并且col_b不需要索引.

然而,当我做一个查询fts_table这样的

SELECT * FROM fts_table WHERE fts_table MATCH 'something';
Run Code Online (Sandbox Code Playgroud)

我没有访问col_a,并col_b从内容表t2.如何返回所有这些列(col_a,col_b,col_text)从单个FTS查询?

更新

我尝试使用该notindexed=column_name选项

CREATE VIRTUAL TABLE fts_table USING fts4(content="t2", col_a, col_b, col_text, notindexed=col_a, notindexed=col_b);
Run Code Online (Sandbox Code Playgroud)

这应该适用于某些人,但我在Android中使用它,notindexed直到SQLite 3.8才支持该选项,Android直到Android版本5.x才支持.我需要支持android 4.x. 我正在更新此问题以包含Android代码.

sqlite android full-text-search fts4

4
推荐指数
1
解决办法
1226
查看次数

Android Sqlite FTS NOT操作

我正在尝试订购快速文本搜索,以便完全匹配是第一个,部分匹配是最后一个.

我创建了一个在SQLiteStudio中工作的查询:

SELECT value, 1 AS _order FROM glossfts
WHERE glossfts.value MATCH 'dog'
UNION
SELECT value, 2 AS _order FROM glossfts
WHERE glossfts.value MATCH 'dog* NOT dog'
ORDER BY _order
Run Code Online (Sandbox Code Playgroud)

结果就是这样

Beware of dog                                     1
Disliked by everybody, not even a dog will eat    1
Bad dog                                           1
Creed, dogma                                      2
Dogs                                              2
Dogwood                                           2
Run Code Online (Sandbox Code Playgroud)

这很好用但是当我在android中使用相同的查询时我才会得到

Beware of dog                                     1
Disliked by everybody, not even a dog will eat    1
Bad dog                                           1
Disliked by everybody, not even a dog …
Run Code Online (Sandbox Code Playgroud)

sqlite android fts4

3
推荐指数
1
解决办法
612
查看次数