在核心数据中使用正则表达式改进搜索算法?
Improving Search Algorithem using Regex in CoreData?
我正在从 SQLite 实现过渡到 CoreData。
在 SQLite 中,搜索相当有限。在典型的搜索中,对于像“card”这样的字符串,我想知道像 [n,l,j,x] 这样的一组字母中的任何成员是否是一个单词或整个单词的有效部分, 在存储的字符串字典中。
因此,在上面的示例中,我必须查找 "nard","lard","jard","xard"
,然后对字符串中的每个后续位置重复该过程:"cnrd","clrd","cjrd","cxrd"
.
这受到以下事实的轻微控制,即我只需要目标字符串中每个位置的单个匹配项来“限定”它,因此我可以搜索 "nard","cnrd","cand","carn"
,如果我在任何地方得到匹配项点,我可以将目标词中的那个点标记为合格,并专注于其他目标。
因此,如果我在“nard”处找到匹配项而没有其他匹配项,则下一个循环可能会检查 "clrd","cald","carl"
,依此类推。如果我在 "nard","cand"
得到匹配,下一个循环将是 "clrd","carl"
:你明白了。
我知道 CoreData 无论如何都只是 SQLite,是否提供任何更高级的功能,使我能够改进我使用的默认算法,也许使用正则表达式?可以以某种方式使用像 \^{3}[nljx]\
这样的模式吗?
我现在还没有写代码来朝这个方向进行实验,所以任何人都可以指出我的意见。
当您将 SQLite 存储与 Core Data 一起使用时,谓词将转换为 SQLite 代码并在 SQLite 中执行。因此,谓词具有 SQLite 对可能的限制。 Core Data 可以使用具有不同功能和限制的其他存储类型——例如,您可以使用任意代码块的谓词,但整个持久存储始终加载到内存中。其中之一是否适合您取决于您拥有多少数据。
是的,您可以使用带有 NSMatchesPredicateOperatorType
的谓词进行正则表达式搜索。 SQLite 不直接支持正则表达式,但 Core Data 注册了一个自定义 NSCoreDataMatches
函数来完成工作而无需将所有内容都存入内存。
我正在从 SQLite 实现过渡到 CoreData。
在 SQLite 中,搜索相当有限。在典型的搜索中,对于像“card”这样的字符串,我想知道像 [n,l,j,x] 这样的一组字母中的任何成员是否是一个单词或整个单词的有效部分, 在存储的字符串字典中。
因此,在上面的示例中,我必须查找 "nard","lard","jard","xard"
,然后对字符串中的每个后续位置重复该过程:"cnrd","clrd","cjrd","cxrd"
.
这受到以下事实的轻微控制,即我只需要目标字符串中每个位置的单个匹配项来“限定”它,因此我可以搜索 "nard","cnrd","cand","carn"
,如果我在任何地方得到匹配项点,我可以将目标词中的那个点标记为合格,并专注于其他目标。
因此,如果我在“nard”处找到匹配项而没有其他匹配项,则下一个循环可能会检查 "clrd","cald","carl"
,依此类推。如果我在 "nard","cand"
得到匹配,下一个循环将是 "clrd","carl"
:你明白了。
我知道 CoreData 无论如何都只是 SQLite,是否提供任何更高级的功能,使我能够改进我使用的默认算法,也许使用正则表达式?可以以某种方式使用像 \^{3}[nljx]\
这样的模式吗?
我现在还没有写代码来朝这个方向进行实验,所以任何人都可以指出我的意见。
当您将 SQLite 存储与 Core Data 一起使用时,谓词将转换为 SQLite 代码并在 SQLite 中执行。因此,谓词具有 SQLite 对可能的限制。 Core Data 可以使用具有不同功能和限制的其他存储类型——例如,您可以使用任意代码块的谓词,但整个持久存储始终加载到内存中。其中之一是否适合您取决于您拥有多少数据。
是的,您可以使用带有 NSMatchesPredicateOperatorType
的谓词进行正则表达式搜索。 SQLite 不直接支持正则表达式,但 Core Data 注册了一个自定义 NSCoreDataMatches
函数来完成工作而无需将所有内容都存入内存。