Couchbase lite, поисковый запрос занимает очень много времени

Когда я пытаюсь найти документы в формате couchbase размером около 10 Кб, поиск занимает очень много времени. Ниже приведен фрагмент кода. Может кто-нибудь оптимизировать его или предложить мне какой-нибудь альтернативный подход. Спасибо.

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 ответ

  1. Вы излучаете весь документ вместе с каждым полем для вашего просмотра. Это может легко вызвать медленные запросы. Также маловероятно, что вы захотите это сделать, если только вам не нужно иметь возможность запрашивать все поля в вашем документе.
  2. Рекомендуется устанавливать функцию карты сразу после открытия базы данных. Ожидание до начала запроса может замедлить или не замедлить вас.

См. https://developer.couchbase.com/documentation/mobile/current/guides/couchbase-lite/native-api/view/index.html для получения дополнительной информации, особенно в разделе, озаглавленном "Вопросы развития".

Другие вопросы по тегам