我在我的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所指出的,以相反的顺序存储整个文本并在反向字符串上运行前缀搜索是以/后缀结尾搜索问题的可能解决方案,这是我最初的问题,但它不适用于“包含”搜索。我已经相应地更新了问题。
4条答案
按热度按时间wi3ka0sx1#
在我的iOS和Android应用程序中,我一直回避FTS搜索,因为它不支持子字符串匹配,因为缺乏后缀查询。
解决方法似乎很复杂。
我使用了LIKE查询,虽然它的性能不如MATCH,但满足了我的需求。
eoxn13cs2#
解决方法是将反向字符串存储在额外的列中。看到这个链接(它不完全相同,它应该给予一个想法):
Search Suffix using Full Text Search
wmtdaxz33#
为了让它对contains查询起作用,您需要存储您希望能够搜索的术语的所有后缀。这样做的缺点是使数据库变得非常大,但是可以通过压缩数据来避免。
SQLite FTS contains and suffix matches
vof42yt14#
你可以只做反向文本插入和搜索: