沙发基地精简版,搜索查询需要很长时间



当我尝试搜索大小约为 10K 的 couchbase 文档时,搜索需要很长时间。下面是代码片段。任何人都可以优化它或向我建议任何替代方法。谢谢。

1) 搜索功能

func search(keyword:String) -> [[String:AnyObject]] {
var results:[[String:AnyObject]]=[]
 let searchView = database.viewNamed(AppConstants().SEARCH)
        if searchView.mapBlock == nil {
            startIndexing()
        }
        let query = searchView.createQuery()
        var docIds = Set<String>()
            let result = try query.run()
            while let row = result.nextRow() {
                let key = "(row.key)"
                let keyArr = keyword.characters.split(" ")
                for (index, element) in keyArr.enumerate() {
                    let keyItem = String(element)
                    if key.lowercaseString.containsString(keyItem.lowercaseString) {
                        let value = row.value as! [String:AnyObject]
                        let id = value["_id"] as? String
                        if id != nil && !docIds.contains(id!) {
                            results.append(value)
                            docIds.insert(id!)
                        }
                    }
                }
            }
        }

2) 索引

func startIndexing() {
let searchView = database.viewNamed(AppConstants().SEARCH)
    if searchView.mapBlock == nil {
        searchView.setMapBlock({ (doc, emit) in
            let docType = doc[AppConstants().DOC_TYPE] as! String
            if AppConstants().DOC_TYPE_CONTACT.isEqual(docType) {
                self.parseJsonToKeyValues(doc)
                for value in self.fields.values {
                    emit(value, doc)
                }
                self.fields.removeAll()
            }
            }, version: "1")
    }
}

self.parseJsonToKeyValues(doc) 将返回要索引的文档的键值存储。

  1. 您将发出整个文档以及视图的每个字段。 这很容易导致查询速度变慢。 您似乎也不太可能这样做,除非您确实需要能够查询文档中的每个字段。
  2. 最佳做法
  3. 是在打开数据库后立即设置 map 函数。 等到查询前可能会也可能不会减慢您的速度。

有关详细信息,请参阅 https://developer.couchbase.com/documentation/mobile/current/guides/couchbase-lite/native-api/view/index.html,尤其是标有"开发注意事项"的部分。

最新更新