11

我在我的 iOS 应用程序中使用 SQLite FTS 扩展。它表现良好,但问题是它只匹配字符串前缀(或以关键字搜索开头)。

IE

这有效:

SELECT FROM tablename WHERE columnname MATCH 'searchterm*'

但以下两个没有:

SELECT FROM tablename WHERE columnname MATCH '*searchterm'


SELECT FROM tablename WHERE columnname MATCH '\*searchterm\*'

是否有任何解决方法或任何方式使用 FTS 构建类似于查询的LIKE '%searchterm%'查询。

编辑:

正如 Retterdesdialogs 所指出的,以相反的顺序存储整个文本并对反向字符串运行前缀搜索是解决以/后缀搜索问题结尾的可能解决方案,这是我最初的问题,但它不适用于“包含”搜索。我已经相应地更新了这个问题。

4

3 回答 3

3

在我的 iOS 和 Android 应用程序中,我回避 FTS 搜索的确切原因是由于缺少后缀查询,它不支持子字符串匹配。

解决方法似乎很复杂。

我求助于使用 LIKE 查询,虽然性能不如 MATCH,但可以满足我的需求。

于 2016-06-20T18:29:09.273 回答
2

解决方法是将反向字符串存储在额外的列中。请参阅此链接(它不完全相同,它应该给出一个想法):

使用全文搜索搜索后缀

于 2012-08-09T10:40:57.193 回答
2

要使其适用于包含查询,您需要存储您希望能够搜索的术语的所有后缀。这有使数据库变得非常大的缺点,但可以通过压缩数据来避免。

SQLite FTS 包含和后缀匹配

于 2013-09-03T17:00:48.997 回答