以(后缀)结尾,并在SQLite FTS中使用MATCH包含字符串搜索

时间:2012-08-01 05:08:57

标签: iphone ios sqlite fts3

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

即。

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指出的那样,以相反的顺序存储整个文本并在反向字符串上运行前缀搜索是一个可能的解决方案,结尾有/ suffix搜索问题,这是我原来的问题,但它不适用于'包含'搜索。我已相应更新了这个问题。

3 个答案:

答案 0 :(得分:2)

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

SQLite FTS contains and suffix matches

答案 1 :(得分:1)

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

Search Suffix using Full Text Search

答案 2 :(得分:1)

在我的iOS和Android应用程序中,由于缺少后缀查询,我完全没有支持子字符串匹配,因此我一直避开FTS搜索。

解决方法似乎很复杂。

我已经使用LIKE查询,虽然性能不如MATCH,但满足了我的需求。