From f599483aab14934dd31db63bc3f791999b8e4111 Mon Sep 17 00:00:00 2001 From: ston1th Date: Sat, 24 Aug 2019 18:51:44 +0200 Subject: [PATCH] move index mapping to const variables --- pkg/index/index.go | 22 +++++++++++----------- pkg/index/mapping.go | 21 +++++++++++++-------- 2 files changed, 24 insertions(+), 19 deletions(-) diff --git a/pkg/index/index.go b/pkg/index/index.go index ea717f3..68dfc24 100644 --- a/pkg/index/index.go +++ b/pkg/index/index.go @@ -14,9 +14,13 @@ import ( "time" ) -const maxSearchResult = 101 - -const docType = "document" +const ( + maxSearchResult = 101 + docType = "document" + textField = "text" + tagsField = "tags" + createdField = "created" +) type Document struct { Text string `json:"text"` @@ -41,7 +45,6 @@ func NewIndex(path string) (i *Index, err error) { err = errors.New("index: " + err.Error()) return } - //m := bleve.NewIndexMapping() bi, err = bleve.New(path, m) if err != nil { err = errors.New("index: " + err.Error()) @@ -88,13 +91,10 @@ func (i *Index) Get(id string) (doc *Document, err error) { for _, f := range d.Fields { n := f.Name() switch n { - case "text": + case textField: text := document.NewTextField(n, f.ArrayPositions(), f.Value()) doc.Text = string(text.Value()) - //case "tags": - // tags := document.NewTextField(n, f.ArrayPositions(), f.Value()) - // doc.Tags = append(doc.Tags, string(tags.Value())) - case "created": + case createdField: created := document.NewDateTimeFieldFromBytes(n, f.ArrayPositions(), f.Value()) doc.Created, _ = created.DateTime() } @@ -124,14 +124,14 @@ func (i *Index) Search(search string) (results core.Results, err error) { continue } for fragField, frags := range hit.Fragments { - if fragField == "tags" { + if fragField == tagsField { var t string for _, f := range frags { t += f } r.Tags = strings.ReplaceAll(strings.ReplaceAll(t, "", ""), "", "") } - if fragField == "text" || fragField == "created" { + if fragField == textField || fragField == createdField { for _, f := range frags { r.HTML += template.HTML(f) } diff --git a/pkg/index/mapping.go b/pkg/index/mapping.go index 45c0e66..4de91bd 100644 --- a/pkg/index/mapping.go +++ b/pkg/index/mapping.go @@ -11,10 +11,15 @@ import ( "github.com/blevesearch/bleve/mapping" ) +const ( + bigram = "bigram_tokenfilter" + ngram = "fulltext_ngram" +) + func createMapping() (m *mapping.IndexMappingImpl, err error) { m = bleve.NewIndexMapping() - err = m.AddCustomTokenFilter("bigram_tokenfilter", map[string]interface{}{ + err = m.AddCustomTokenFilter(bigram, map[string]interface{}{ "type": edgengram.Name, "side": edgengram.FRONT, "min": 3.0, @@ -23,12 +28,12 @@ func createMapping() (m *mapping.IndexMappingImpl, err error) { if err != nil { return } - err = m.AddCustomAnalyzer("fulltext_ngram", map[string]interface{}{ + err = m.AddCustomAnalyzer(ngram, map[string]interface{}{ "type": custom.Name, "tokenizer": unicode.Name, "token_filters": []string{ lowercase.Name, - "bigram_tokenfilter", + bigram, }, }) if err != nil { @@ -37,12 +42,12 @@ func createMapping() (m *mapping.IndexMappingImpl, err error) { doc := bleve.NewDocumentMapping() tm := bleve.NewTextFieldMapping() - tm.Analyzer = "fulltext_ngram" - doc.AddFieldMappingsAt("text", tm) - km := bleve.NewTextFieldMapping() - doc.AddFieldMappingsAt("keyword", km) + tm.Analyzer = ngram + doc.AddFieldMappingsAt(textField, tm) + tagm := bleve.NewTextFieldMapping() + doc.AddFieldMappingsAt(tagsField, tagm) cm := bleve.NewDateTimeFieldMapping() - doc.AddFieldMappingsAt("created", cm) + doc.AddFieldMappingsAt(createdField, cm) m.AddDocumentMapping(docType, doc) return