// Copyright 2014 Google Inc. All rights reserved. // Use of this source code is governed by the Apache 2.0 // license that can be found in the LICENSE file. package search // Field is a name/value pair. A search index's document can be loaded and // saved as a sequence of Fields. type Field struct { // Name is the field name. A valid field name matches /[A-Za-z][A-Za-z0-9_]*/. Name string // Value is the field value. The valid types are: // - string, // - search.Atom, // - search.HTML, // - time.Time (stored with millisecond precision), // - float64, // - GeoPoint. Value interface{} // Language is a two-letter ISO 639-1 code for the field's language, // defaulting to "en" if nothing is specified. It may only be specified for // fields of type string and search.HTML. Language string // Derived marks fields that were calculated as a result of a // FieldExpression provided to Search. This field is ignored when saving a // document. Derived bool } // Facet is a name/value pair which is used to add categorical information to a // document. type Facet struct { // Name is the facet name. A valid facet name matches /[A-Za-z][A-Za-z0-9_]*/. // A facet name cannot be longer than 500 characters. Name string // Value is the facet value. // // When being used in documents (for example, in // DocumentMetadata.Facets), the valid types are: // - search.Atom, // - float64. // // When being used in SearchOptions.Refinements or being returned // in FacetResult, the valid types are: // - search.Atom, // - search.Range. Value interface{} } // DocumentMetadata is a struct containing information describing a given document. type DocumentMetadata struct { // Rank is an integer specifying the order the document will be returned in // search results. If zero, the rank will be set to the number of seconds since // 2011-01-01 00:00:00 UTC when being Put into an index. Rank int // Facets is the set of facets for this document. Facets []Facet } // FieldLoadSaver can be converted from and to a slice of Fields // with additional document metadata. type FieldLoadSaver interface { Load([]Field, *DocumentMetadata) error Save() ([]Field, *DocumentMetadata, error) } // FieldList converts a []Field to implement FieldLoadSaver. type FieldList []Field // Load loads all of the provided fields into l. // It does not first reset *l to an empty slice. func (l *FieldList) Load(f []Field, _ *DocumentMetadata) error { *l = append(*l, f...) return nil } // Save returns all of l's fields as a slice of Fields. func (l *FieldList) Save() ([]Field, *DocumentMetadata, error) { return *l, nil, nil } var _ FieldLoadSaver = (*FieldList)(nil)