iOS联系人搜索应用程序
我正在开发一个类似于iOS联系人应用程序的应用程序。 在我的应用程序中,列表中大约有20000个联系人。 我想在此应用程序中执行通用搜索。 我们在搜索字段中键入时,也应该进行搜索 ,搜索“John Australia”将显示联系人,其中John位于姓名字段,澳大利亚位于地址字段。 我使用了coredata,但它的性能非常差(我不知道可能是我使用了不正确的谓词,我使用了OR和and组合的谓词) 所以现在我转到sqlite FTS4数据库,使用FMDB搜索联系人。性能比核心数据好得多 以下是我对FTS4所做的 已将所有联系人导入coredata文件(uniqID、姓名、年龄、电子邮件、公司、职务、地址、备注等)。 现在创建了一个具有uniqID、searchText和displayName的fts4虚拟表iOS联系人搜索应用程序,ios,objective-c,core-data,full-text-search,fts4,Ios,Objective C,Core Data,Full Text Search,Fts4,我正在开发一个类似于iOS联系人应用程序的应用程序。 在我的应用程序中,列表中大约有20000个联系人。 我想在此应用程序中执行通用搜索。 我们在搜索字段中键入时,也应该进行搜索 ,搜索“John Australia”将显示联系人,其中John位于姓名字段,澳大利亚位于地址字段。 我使用了coredata,但它的性能非常差(我不知道可能是我使用了不正确的谓词,我使用了OR和and组合的谓词) 所以现在我转到sqlite FTS4数据库,使用FMDB搜索联系人。性能比核心数据好得多 以下是我对FT
create virtual table searchData using FTS4 (guid, searchText, displayName)
并将所有字段插入fts4表。
例如
uniqId name age email company title address note
12312 , John,32,johnsock@style.com , style Inc, CEO , Australia Street-4 , bla bla bla
这是核心数据中的行,它被移动到FTS4表中,如下所示
uniqID searchText displayName
12312 John John
12312 johnsock@style.com John
12312 Style Inc John
12312 CEO John
12312 Australia Street-4 John
12312 bla bla bla John
现在我正在这个sqlite fts 4表中执行搜索。
这是我对“John Australia”的SQL查询
如果我有3个单词,那么我将有3个选择查询。
我从这个查询中得到的输出工作得很好
从查询中获得结果后,我使用显示名称在tableview中填充
我有两个问题
1如果我有多个单词,与iOS本机联系人应用程序相比,我仍然面临性能问题
是否有任何算法或逻辑,我可以在这个搜索中应用,这样我的搜索就快了(请考虑多词搜索)。 同时,我如何才能搜索电子邮件id与喜欢的查询保持相同的更好的性能
参考:我们在项目中遇到了类似的性能问题,sqlite中的pragma命令帮助了我们。您可以使用以下命令进行性能升级
SELECT guid,displayName FROM searchData WHERE searchText MATCH John* INTERSECT SELECT guid,displayName FROM searchData WHERE searchText MATCH Australia*