Confusing relationship between attributeSet, defaultAttributeSet, and displayRepresentation

I’m trying to understand the intended relationship between IndexedEntity.attributeSet, defaultAttributeSet, and displayRepresentation.

For example:

struct TrailEntity: IndexedEntity { var displayRepresentation: DisplayRepresentation { DisplayRepresentation( title: "(trail.name)", subtitle: "(trail.location)" ) }

var attributeSet: CSSearchableItemAttributeSet {
    let attributes = CSSearchableItemAttributeSet()
    attributes.keywords = trail.keywords
    return attributes
}

}

Should attributeSet instead be initialized with defaultAttributeSet and then have the additional attributes assigned to it?

var attributeSet: CSSearchableItemAttributeSet { let attributes = defaultAttributeSet attributes.keywords = trail.keywords return attributes }

The documentation says defaultAttributeSet contains values derived from displayRepresentation, but it also describes precedence between displayRepresentation and attributeSet, which suggests Spotlight reads them separately during indexing.

So what is the intended pattern?

Does overriding attributeSet require including defaultAttributeSet to preserve title/subtitle/image metadata, or is attributeSet only meant for additional Core Spotlight metadata?

If the latter, what is the intended use case for overriding or directly using defaultAttributeSet?

Right formatting for the code example:

struct TrailEntity: IndexedEntity {
    var displayRepresentation: DisplayRepresentation {
        DisplayRepresentation(
            title: "\(trail.name)",
            subtitle: "\(trail.location)"
        )
    }

    var attributeSet: CSSearchableItemAttributeSet {
        let attributes = CSSearchableItemAttributeSet()
        attributes.keywords = trail.keywords
        return attributes
    }
}
Confusing relationship between attributeSet, defaultAttributeSet, and displayRepresentation
 
 
Q