我正在编写一个应用程序,它具有一个照片数据库。每张照片都有几个与之关联的标签,并且该应用程序具有一个搜索页面,其中包含许多切换按钮,允许用户仅基于他们感兴趣的标签搜索照片。每个标签都有存储的整数ID,因为它们对应于外部数据库的ID,所以我正在尝试通过ID简单地查找它们。所有ID字段都已进行了索引。
当我编写的谓词变得非常大时,问题就出现了,因为用户可以选择从许多不同的标签进行筛选。这些标签分为3个类别[出版物、品牌和产品],因此我的查询被设置为在类别内进行“OR”操作,在这些类别之间进行“AND”操作。
一个示例查询谓词最终看起来像这样:
他们可以变得更大,但你已经明白了要点。我的问题是,由于所有这些执行昂贵的连接,一旦用户选择超过10或15个,查询就会非常缓慢,甚至可能导致应用程序崩溃。
看起来编写如下内容会更加高效:
当我编写的谓词变得非常大时,问题就出现了,因为用户可以选择从许多不同的标签进行筛选。这些标签分为3个类别[出版物、品牌和产品],因此我的查询被设置为在类别内进行“OR”操作,在这些类别之间进行“AND”操作。
一个示例查询谓词最终看起来像这样:
(parentPublication.publicationId==1 OR parentPublication.publicationId==2 OR parentPublication.publicationId==5)
AND (ANY brands.brandId==12 OR ANY brands.brandId==2 OR ANY brands.brandId==0 OR ANY brands.brandId==3 OR ANY brands.brandId==5 OR ANY brands.brandId==6 OR ANY brands.brandId==7)
AND (ANY products.productId==2 OR ANY products.productId==3 OR ANY products.productId==6)
他们可以变得更大,但你已经明白了要点。我的问题是,由于所有这些执行昂贵的连接,一旦用户选择超过10或15个,查询就会非常缓慢,甚至可能导致应用程序崩溃。
看起来编写如下内容会更加高效:
parentPublication.publicationId IN (1,2,5)
AND (ANY brands.brandId IN (12,2,0,3,5,6,7))
AND (ANY products.productId IN (2,3,6))
但是我似乎无法让这种语法正常工作。
所以我的问题是:是否支持这种类型的语法,如果支持,有人能展示一下如何正确地编写它吗?
或者是否有更好的方法来处理对Core Data的这种查询呢?
NSNumber
对象。@[@12,@0,@1]
- Mundi