以(后缀)结尾,包含在SQLite FTS中使用MATCH进行stringsearch
我在我的iOS应用程序中使用SQLite FTS扩展。 它执行得很好,但问题是它只匹配string前缀(或从关键字search开始)。
即
SELECT FROM tablename WHERE columnname MATCH'searchterm *'
工作但是
SELECT FROM tablename WHERE columnname MATCH'* searchterm'
要么
SELECT FROM tablename WHERE columnname MATCH'* searchterm *'
才不是。
是否有任何解决方法,以此或任何方式使用FTS来构build类似于“LIKE'%searchterm%'”查询的查询。
编辑:
正如Retterdesdialogs所指出的那样,以相反的顺序存储整个文本,并在反向string上运行前缀search是一个解决/ suffixsearch问题的结束方式,这是我的原始问题,但不适用于“包含”search。 我已经相应地更新了这个问题。
在我的iOS和Android应用程序中,我避开了FTSsearch,因为缺less后缀查询,不支持子string匹配。
解决方法似乎很复杂。
我使用LIKE查询,虽然性能比MATCH低,但却满足了我的需求。
为了使它适用于包含查询,您需要存储您想要search的术语的所有后缀。 这使数据库真的很大,但可以通过压缩数据来避免。
SQLite FTS包含和后缀匹配
解决方法是将反向string存储在额外的列中。 看到这个链接(它不完全相同,应该给出一个想法):
使用全文searchsearch后缀