我有一个Verse实体的模型,它与Word实体有多对多的关系。
我想找到包含用户正在搜索的所有单词的经文。
我猜这可以用像
这样的谓词来完成 "ANY words.word == %@ AND ANY words.word == %@ AND ...", term1, term2, ...
这可以使用某种类型的word-> Verse索引,以避免必须将每个经文的单词与term1进行比较?
如果不是,应该如何更改(模型或)谓词以使此提取更有效?
答案 0 :(得分:1)
我会为每个字词创建一个NSPredicate
,然后使用andPredicateWithSubpredicates:
NSCompoundPredicate
来执行搜索。如果是实时搜索,请在空格上重新加载搜索结果,或者在每个字符上重新加载,并在CONTAINS中使用一个谓词。
答案 1 :(得分:1)
首先,您可以在一个谓词中执行包含:
[NSPredicate predicateWithFormat:"ANY words.word CONTAINS %@", arrayOfWords];
但是,这将是缓慢的。字符串比较慢。案例和变音符号不敏感几乎是最慢的。你最好在你的Word
实体上拥有另一个属性,用于搜索你去除案例和变音符号的地方,然后搜索该字段。您的搜索性能会更高。