0
0
Fork 0
bleve/document/field_text.go

77 lines
2.0 KiB
Go
Raw Normal View History

2014-04-17 22:55:53 +02:00
// Copyright (c) 2014 Couchbase, Inc.
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
// except in compliance with the License. You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software distributed under the
// License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
// either express or implied. See the License for the specific language governing permissions
// and limitations under the License.
package document
import (
"log"
"github.com/couchbaselabs/bleve/analysis"
"github.com/couchbaselabs/bleve/analysis/analyzers/standard_analyzer"
)
var standardAnalyzer *analysis.Analyzer
func init() {
var err error
standardAnalyzer, err = standard_analyzer.NewStandardAnalyzer()
if err != nil {
log.Fatal(err)
}
}
const DEFAULT_TEXT_INDEXING_OPTIONS = INDEX_FIELD
type TextField struct {
name string
options IndexingOptions
analyzer *analysis.Analyzer
value []byte
}
func (t *TextField) Name() string {
return t.name
}
func (t *TextField) Options() IndexingOptions {
return t.options
}
2014-07-21 23:05:55 +02:00
func (t *TextField) Analyze() (int, analysis.TokenFrequencies) {
tokens := t.analyzer.Analyze(t.Value())
fieldLength := len(tokens) // number of tokens in this doc field
tokenFreqs := analysis.TokenFrequency(tokens)
return fieldLength, tokenFreqs
}
func (t *TextField) Value() []byte {
return t.value
}
func NewTextField(name string, value []byte) *TextField {
2014-04-17 22:55:53 +02:00
return NewTextFieldWithIndexingOptions(name, value, DEFAULT_TEXT_INDEXING_OPTIONS)
}
func NewTextFieldWithIndexingOptions(name string, value []byte, options IndexingOptions) *TextField {
return &TextField{
name: name,
options: options,
analyzer: standardAnalyzer,
value: value,
}
}
func NewTextFieldCustom(name string, value []byte, options IndexingOptions, analyzer *analysis.Analyzer) *TextField {
return &TextField{
name: name,
options: options,
analyzer: analyzer,
value: value,
2014-04-17 22:55:53 +02:00
}
}