gpt4 book ai didi

ios - (Swift) 如何对Core Data进行模糊搜索?

转载 作者:搜寻专家 更新时间:2023-10-31 22:23:07 26 4
gpt4 key购买 nike

我正在尝试在 Swift 中通过 Core Data 键实现搜索。我想返回相关结果,包括精确结果和近似结果,按距离排序(从最接近的匹配到最远的匹配)。

例如,如果有人搜索“friend”,我希望搜索结果如下所示:“friend”、“friends”、“friendly”和“friand”。

我已经尽力实现了这样的搜索,但我对这类代码还很陌生,而且我尝试的实现目前对我来说还不太奏效。这是我的代码:

var request = NSFetchRequest(entityName: "db")
request.returnsObjectsAsFaults = false
request.predicate = NSPredicate(format: "dbKey MATCHES %@", ".*" + searchString + ".*")
var results: Array = context.executeFetchRequest(request, error: nil)!

if (results.count > 100) {
results.removeRange(Range(start: 100, end: results.count-1))
}

var sortedResults: Array = [results[0]]

for (var i = 1; i < results.count; ++i) {
if (countElements(results[i].valueForKey("dbKey") as String) < countElements(sortedResults[i-1].valueForKey("dbKey") as String)) {
var j = i-1
while (countElements(results[i].valueForKey("dbKey") as String) < countElements(sortedResults[j].valueForKey("dbKey") as String)) {
if (j != 0) {
--j
} else {
break
}
}
sortedResults.insert(results[i], atIndex: j)
} else {
sortedResults.append(results[i])
}
}

results = sortedResults

问题是双重的:

  • 首先,返回的结果没有特定的顺序,所以如果我搜索“a”,在获得完全匹配之前很久就会返回大量包含“a”的词。由于我在前 100 个结果后就中断了,所以我从来没有在我的结果中显示完全匹配的结果。
  • 其次,排名是近似的。这可能是我的数学错误,但目前,许多较长的词出现在较短的词之前,因此您不会在结果列表的顶部看到完全或接近完全匹配的结果,而您应该看到。

我试图找到一个包含我正在寻找的那种搜索功能的库(类似于 Fuse.js ),但我没有运气。任何帮助将不胜感激。

最佳答案

您可以使用不同的谓词过滤结果并决定使用哪一个;

  • let result = NSPredicate(format: "dbKey CONTAINS[cd] %@", searchString)
  • let result = NSPredicate(format: "dbKey startsWith[cd] %@", searchString)
  • let result = NSPredicate(format: "dbKey LIKE '%@'", searchString)

对于特定顺序,您应该使用NSSortDescriptor

关于ios - (Swift) 如何对Core Data进行模糊搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28274560/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com