| // 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) |