0

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

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

我猜它可以用一个谓词来完成

    "ANY words.word == %@ AND ANY words.word == %@ AND ...", term1, term2, ...

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

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

4

2 回答 2

1

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

于 2015-07-16T19:32:56.447 回答
1

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

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

但是,那会很慢。字符串比较很慢。不区分大小写和变音符号几乎是最慢的。您最好在您的Word实体上拥有另一个属性,用于搜索您去除大小写和变音符号的位置,然后针对该字段进行搜索。您的搜索性能会更高。

于 2015-07-16T19:38:40.087 回答