2017-01-06 14 views
0

サイズが約10Kのcouchbaseドキュメントを検索しようとすると、検索に非常に時間がかかります。以下はコードスニペットです。誰もがそれを最適化するか、私に何か別のアプローチを提案することができますありがとうございました。Couchbase lite、検索クエリが非常に長い時間がかかります

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)は、インデックスに私に私の文書のキー値ストアを返します。

答えて

0
  1. すべてのフィールドとともに、文書全体が表示されます。これにより、簡単にクエリが遅くなる可能性があります。ドキュメント内のすべてのフィールドに対して本当に照会できる必要がない限り、これをやりたいとは思われません。
  2. データベースを開いた直後にマップ機能を設定することをお勧めします。あなたが質問する直前まで待つことは、あなたを遅くするか遅らせることができません。

https://developer.couchbase.com/documentation/mobile/current/guides/couchbase-lite/native-api/view/index.html詳細については、特に「開発の考慮事項」というセクションを参照してください。

関連する問題