iOS 联系人搜索应用

Posted

技术标签:

【中文标题】iOS 联系人搜索应用【英文标题】:iOS contact search app 【发布时间】:2013-12-27 08:03:40 【问题描述】:

我正在开发一个类似于 ios 联系人应用程序的应用程序。 在我的应用程序中,列表中大约有 20000 个联系人。 我想在这个应用程序中执行通用搜索。 当我们在搜索字段中输入时,搜索也应该发生

,搜索“John Australia”将在名字字段中找到 John 所在的联系人,在地址字段中找到 Australia。 我使用了 coredata,但它的性能很差(我不知道可能是我使用的谓词不正确,我使用了 OR 和 AND 组合的谓词)。

所以现在我转移到 sqlite FTS4 数据库并使用 FMDB 搜索联系人。性能比核心数据好得多。

这是我对 FTS4 所做的

将所有联系人导入 coredata 文件(uniqID、姓名、年龄、电子邮件、公司、职务、地址、备注)。 现在用 uniqID ,searchText,displayName 创建了一个 fts4 虚拟表

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 查询

SELECT guid,displayName FROM searchData WHERE searchText MATCH John* INTERSECT SELECT guid,displayName FROM searchData WHERE searchText MATCH Australia*

如果我有 3 个单词,那么我将有 intersection 3 select query 。 我从此查询中得到的输出运行良好。

从查询中获得结果后,我使用显示名称填充到 tableview 中

我有 2 个问题。

1 如果我有多个单词,与 iOS 原生联系人应用程序相比,我仍然面临性能问题。

    如果我只搜索一个词,性能非常好,但是 对多词搜索不满意。

    我的查询不会使用 like 搜索电子邮件 ID(即我需要获取 即使我用作品“sock”搜索结果)。

我可以在这个搜索中应用任何算法或逻辑,以便我的搜索速度很快(请考虑多词搜索)。 同时,我如何使用类似查询来搜索电子邮件 ID,以保持相同的更好性能

参考:http://www.sqlite.org/fts3.html

http://www.swwritings.com/post/2013-04-30-searching-for-speedy-searching

【问题讨论】:

【参考方案1】:

我们在项目中遇到了类似的性能问题,sqlite 中的 pragma 命令帮助了我们。您可以使用以下命令进行性能升级

    更改缓存大小(每页为 1024 字节)

    PRAGMA cache_size = 页数;

    更改同步写入行为

    “PRAGMA 同步 = 关闭”

    将临时存储更改为内存

    “PRAGMA temp_store = MEMORY”

这些命令中的大多数都是针对每个会话的,因此您可能必须在每次连接后执行它们。在实现此功能之前,您可能还需要阅读文档,因为这些命令会以一定的成本提高性能。这些 pragma 命令记录在 here。

【讨论】:

以上是关于iOS 联系人搜索应用的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 7 联系人应用程序中创建搜索栏

使用 iOS Addressbook api 搜索交换联系人

如何在 iOS 应用程序(如联系人应用程序)中设置编辑

iOS Swift CNContactPickerViewController 搜索联系人并添加到选择

类似于原生联系人应用程序的粘性搜索栏和部分标题行为

按姓名搜索联系人