是否有辦法限制在macOS上從NSMetadataQuery查詢回傳的檔案搜索結果的最大數量?目前,如果我輸入1-2個字符作為查詢字串,需要超過5秒鐘才能收到最初的結果集,而且結果計數約為100k-300k,而我只需要前50個結果。如果我的查詢字串超過5個字符,查詢時間就會減少到幾毫秒。
我在MDQuery中嘗試了同樣的方法,并且能夠使用MDQuerySetMaxCount將最大結果限制在50個,所以我想知道NSMetadataQuery中是否有類似的東西?我看到Alfred和類似的應用程式在每次擊鍵時幾乎都會立即回傳前20-40個結果。
這是我目前的情況:
class MDQSearch {
var metadataQuery = NSMetadataQuery()
init() {
registerNotifications()
metadataQuery.searchScopes = [NSString("~/Documents").expendingTildeInPath]
}
func updateQuery(to queryString。String) {
guard queryString.count > 0 else { return }
metadataQuery.predicate = NSPredicate( format: "%K CONTAINS[cd] %@"/span>, argumentArray: [NSMetadataItemFSNameKey, queryString])
metadataQuery.start()
}
func registerNotifications() {
NotificationCenter.default.addObserver(self, selector: #selector(onQueryDidFinishGathering), name: NSNotification.Name.NSMetadataQueryDidFinishGathering, object: metadataQuery)
NotificationCenter.default.addObserver(self, selector: #selector(onQueryGatheringProgress), name: NSNotification.Name.NSMetadataQueryGatheringProgress, object: metadataQuery)
NotificationCenter.default.addObserver(self, selector: #selector(onQueryDidUpdate), name: NSNotification.Name.NSMetadataQueryDidUpdate, object: metadataQuery)
}
@objc func onQueryDidUpdate(){
print("QueryDidUpdate"/span>)
}
@objc func onQueryDidFinishGathering() {
print("QueryDidFinishGathering")
metadataQuery.stop()
print("結果計數。(metadataQuery.resultCount)")
}
@objc func onQueryGatheringProgress(){
print("QueryGatheringProgress"/span>)
if(metadataQuery.resultCount >= 50) {
metadataQuery.stop()
print("結果計數。(metadataQuery.resultCount)")
}
}
}
uj5u.com熱心網友回復:
我建議問題在于你對NSMetadataItemFSNameKey的使用。這很慢,因為必須查閱檔案系統。使用顯示名稱鍵代替;那是由Spotlight索引的資訊,所以它很快速。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/320041.html
標籤:
上一篇:在一個方法中回圈瀏覽ObjectInputStream,在主方法中列印整個檔案,但遇到EOF不起作用或出錯的問題。
