首页 > 解决方案 > Swift:在庞大的数据库中快速搜索以找到相关结果的最佳方法是什么?

问题描述

我正在尝试实现一种搜索算法,该算法可以搜索数十万种产品并显示最相关的搜索。我目前的流程是

  1. 获取用户的输入并过滤掉介词和标点符号以得出关键字

  2. 将关键字分解为数组

  3. 对于每个关键字,找到产品描述中包含该关键字的所有产品,并将所有产品添加到 RawProductDictionary。

  4. 计算关键字和每个产品描述之间的 Levenshtein 距离数。

  5. 根据 Levenshtein 距离数创建一个产品数组。

这个问题建立在这个问题之上

Swift:如何根据每个项目的 Levenshtein 距离数排列字典值

这是我的 Levenshtein 距离函数

  func levenshteinDist(test: String, key: String) -> Int {
   let empty = Array<Int>(repeating:0, count: key.count)
   var last = [Int](0...key.count)

   for (i, testLetter) in test.enumerated() {
       var cur = [i + 1] + empty
       for (j, keyLetter) in key.enumerated() {
           cur[j + 1] = testLetter == keyLetter ? last[j] : min(last[j], last[j + 1], cur[j]) + 1
       }
       last = cur
   }
   return last.last!
 }

这是实现第 5 步的函数

   func getProductData(){
    
  Global.displayProductArry = []
  var pIndexVsLevNum = [String : Int]()
  for product0 in Global.RawSearchDict{
      let generatedString = product0.value.name.uppercased()
      let productIndex = product0.key
      let relevanceNum = levenshteinDist(test: generatedString, key: self.userWordSearch)
        
      pIndexVsLevNum[productIndex] = relevanceNum
  }
    
    print(pIndexVsLevNum)
    Global.displayProductArry = []

    for (k,v) in (Array(pIndexVsLevNum).sorted {$0.1 < $1.1}) {
        print("\(k):\(v)")
        Global.displayProductArry.append(Global.RawSearchDict[k]!)
    }
}

代码有效,但产品与用户输入无关

快速搜索数十万种产品的最佳方法是什么?

标签: swiftstringsearch

解决方案


我相信您正在寻找全文搜索。您可以为此使用现有工具,而不是创建自己的信息检索过程。

看起来SQLite可以为您提供:请参阅:https ://medium.com/flawless-app-stories/how-to-use-full-text-search-on-ios-7cc4553df0e0


推荐阅读