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

Fetching entities whose many-to-many relationship contains all terms

我有一个模型,其中的 Verse 实体与 Word 实体存在多对多关系。

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

我猜它可以用像

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

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

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

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

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

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

但是,那会很慢。字符串比较很慢。大小写和变音符号不敏感几乎是最慢的。你最好在你的 Word 实体上有另一个 属性 来搜索你去掉大小写和变音符号的地方,然后搜索那个字段。您的搜索性能会更高。