mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-09-14 06:39:07 -04:00
KQL searches case-insensitively, so every keyword field gets its lowercased search sibling unless it opts out: ids are opaque, paths are POSIX, the mime type is normalized already. That takes the facets along, artist or camera model match regardless of case, while the case-preserved base still answers and aggregates. Which siblings a field carries is decided once, from the struct and the overrides, and the renderers, the document writer and the query lowering all read it from there.
26 lines
763 B
Go
26 lines
763 B
Go
package mapping
|
|
|
|
import (
|
|
"fmt"
|
|
"reflect"
|
|
|
|
"github.com/opencloud-eu/opencloud/pkg/conversions"
|
|
)
|
|
|
|
// PrepareForIndex converts v to the flat map[string]any the backend index
|
|
// clients expect: a json round-trip (conversions.To) plus type-specific
|
|
// adaptations (currently geopoint siblings). Pass the same overrides as the
|
|
// *BuildMapping calls so the document and the mapping stay in sync.
|
|
func PrepareForIndex(v any, overrides map[string]FieldOpts) (map[string]any, error) {
|
|
out, err := conversions.To[map[string]any](v)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("mapping: prepare %T: %w", v, err)
|
|
}
|
|
if out == nil {
|
|
return out, nil
|
|
}
|
|
addGeopointSiblings(out, overrides)
|
|
addSearchSiblings(out, deref(reflect.TypeOf(v)), overrides)
|
|
return out, nil
|
|
}
|