获取多对多关系包含所有术语的实体

时间:2015-07-16 19:16:53

标签: ios core-data nspredicate nsfetchrequest nscompoundpredicate

我有一个Verse实体的模型,它与Word实体有多对多的关系。

我想找到包含用户正在搜索的所有单词的经文。

我猜这可以用像

这样的谓词来完成
    "ANY words.word == %@ AND ANY words.word == %@ AND ...", term1, term2, ...

这可以使用某种类型的word-> Verse索引,以避免必须将每个经文的单词与term1进行比较?

如果不是,应该如何更改(模型或)谓词以使此提取更有效?

2 个答案:

答案 0 :(得分:1)

我会为每个字词创建一个NSPredicate,然后使用andPredicateWithSubpredicates: NSCompoundPredicate来执行搜索。如果是实时搜索,请在空格上重新加载搜索结果,或者在每个字符上重新加载,并在CONTAINS中使用一个谓词。

答案 1 :(得分:1)

首先,您可以在一个谓词中执行包含:

[NSPredicate predicateWithFormat:"ANY words.word CONTAINS %@", arrayOfWords];

但是,这将是缓慢的。字符串比较慢。案例和变音符号不敏感几乎是最慢的。你最好在你的Word实体上拥有另一个属性,用于搜索你去除案例和变音符号的地方,然后搜索该字段。您的搜索性能会更高。