forked from mystiq/dex
83 lines
2.6 KiB
Go
83 lines
2.6 KiB
Go
|
// 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)
|