2016-07-25 8 views
5

Mail 응용 프로그램 또는 메시지 앱에서 Core Spotlight 검색을 사용하여 메시지 내용을 검색 할 수 있습니다. 또한 OneNote에서이 작업을 수행 할 수 있으므로 API에서 사용할 수 있어야합니다.Core Spotlight를 사용하여 콘텐츠 인덱싱

그러나 설명서는 거의 존재하지 않습니다. 나는 에 단지 contentUrl이 있다는 것을 볼 수 있지만 NSUrl을 .txt 파일로 설정하려고 시도했지만 아무 일도 없었습니다. 또한 콘텐츠 유형을 kUTTypeTextkUTTypeUTF8PlainText으로 설정하려고했지만 개선되지 않았습니다.

특정 파일 형식이 필요합니까? 아니면 다른 사람이해야 할 일이 있을까요? 생성 및 검색 가능한 색인에 항목을 추가하는 과정 아래

+0

데이터가 메시지입니까? 현재 어떤 속성을 설정하고 있습니까? 주제 또는 텍스트 내용? – Wain

+0

왜 앱에서 .txt 파일을 디팝 토링 할 수 없습니까? 나는 이것이 귀하의 사건에 대한 해킹이 될 것이지만 귀하의 문제도 해결할 수 있음을 알고 있습니다. deeplink하려면 고유 한 식별자를 설정하고'- (BOOL) application : (UIApplication *) application continueUserActivity : (nonnull NSUserActivity *) userActivity restorationHandler : (null이 아닌 void (^) (NSArray * _Nullable)) restorationHandler {}' AppDelegate.m –

+0

@Wain, 데이터는 이론적으로 모든 텍스트가 될 수 있으므로 사용자가 저장합니다. 길이는 임의로 지정할 수 있지만 보통 길이는 약 5000 자입니다. 항목이 웹에서 비롯된 것이라면 title과 thumbnailUrl을 설정하고 contentSources도 설정합니다. –

답변

6

Apple documentation on CoreSpotlight 휴식 :

  • 는 CSSearchableItemAttributeSet 객체를 생성하고 인덱스 할 항목을 설명하는 속성을 지정합니다.

  • 항목을 나타내는 CSSearchableItem 개체를 만듭니다. CSSearchableItem 객체에는 나중에 을 참조 할 수 있도록하는 고유 한 식별자가 있습니다.

  • 도메인 식별자를 지정하면 여러 항목을 모아 그룹으로 관리 할 수 ​​있습니다.

  • 검색 가능한 항목과 속성 집합을 연결하십시오.

  • 검색 가능한 항목을 색인에 추가하십시오. 여기

내가 그 방법 인덱스 간단한 참고 클래스 보여주는 간단한 예입니다 :
class Note { 
    var title: String 
    var description: String 
    var image: UIImage? 

    init(title: String, description: String) { 
     self.title = title 
     self.description = description 
    } 
} 

그런 다음 다른 함수에서 생성, 각 노트에 대한 CSSearchableItemAttributeSet를 작성, 노트를 만들 속성 세트 및 인덱스 검색 항목의 컬렉션에서 CSSearchableItem 독특한 :

import CoreSpotlight 
import MobileCoreServices 

// ... 

// Build your Notes data source to index 
var notes = [Note]() 
notes.append(Note(title: "Grocery List", description: "Buy milk, eggs")) 
notes.append(Note(title: "Reminder", description: "Soccer practice at 3")) 
let parkingReminder = Note(title: "Reminder", description: "Soccer practice at 3") 
parkingReminder.image = UIImage(named: "parkingReminder") 
notes.append(parkingReminder) 

// The array of items that will be indexed by CoreSpotlight 
var searchableItems = [CSSearchableItem]() 

for note in notes { 
    // create an attribute set of type Text, since our reminders are text 
    let searchableItemAttributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeText as String) 

    // If we have an image, add it to the attribute set 
    if let image = note.image { 
     searchableItemAttributeSet.thumbnailData = UIImagePNGRepresentation(image) 
     // you can also use thumbnailURL if your image is coming from a server or the bundle 
//  searchableItemAttributeSet.thumbnailURL = NSBundle.mainBundle().URLForResource("image", withExtension: "jpg") 
    } 

    // set the properties on the item to index 
    searchableItemAttributeSet.title = note.title 
    searchableItemAttributeSet.contentDescription = note.description 

    // Build your keywords 
    // In this case, I'm tokenizing the title of the note by a space and using the values returned as the keywords 
    searchableItemAttributeSet.keywords = note.title.componentsSeparatedByString(" ") 

    // create the searchable item 
    let searchableItem = CSSearchableItem(uniqueIdentifier: "com.mygreatapp.notes" + ".\(note.title)", domainIdentifier: "notes", attributeSet: searchableItemAttributeSet) 
} 

// Add our array of searchable items to the Spotlight index 
CSSearchableIndex.defaultSearchableIndex().indexSearchableItems(searchableItems) { (error) in 
    if let error = error { 
     // handle failure 
     print(error) 
    } 
} 

이 예는 꿀벌이있다 n은 AppCoda's How To Use Core Spotlight Framework in iOS 9에서 적응했습니다.

+0

몇 가지 의견이 있었지만 삭제하고 실험을 수행했습니다. 짧은 이메일 (18600 자)이 아니기 때문에 'this'와 같은 일반적인 단어를 포함하여 모든 단어를 검색 할 수 있습니다. 나는 그것이 설명을 사용하는 것을 배제하고 매우 키워드를 배제한다고 생각한다. 동의하니? –

+0

@ 가능합니다. OneNote에는 검색 가능한 항목의 색인을 만들기 전에 검색 가능한 텍스트에서 제거 된 대명사 또는 기타 블랙리스트 단어 목록이 있습니다. – JAL