move index mapping to const variables

This commit is contained in:
ston1th 2019-08-24 18:51:44 +02:00
commit f599483aab
2 changed files with 24 additions and 19 deletions

View file

@ -14,9 +14,13 @@ import (
"time" "time"
) )
const maxSearchResult = 101 const (
maxSearchResult = 101
const docType = "document" docType = "document"
textField = "text"
tagsField = "tags"
createdField = "created"
)
type Document struct { type Document struct {
Text string `json:"text"` Text string `json:"text"`
@ -41,7 +45,6 @@ func NewIndex(path string) (i *Index, err error) {
err = errors.New("index: " + err.Error()) err = errors.New("index: " + err.Error())
return return
} }
//m := bleve.NewIndexMapping()
bi, err = bleve.New(path, m) bi, err = bleve.New(path, m)
if err != nil { if err != nil {
err = errors.New("index: " + err.Error()) 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 { for _, f := range d.Fields {
n := f.Name() n := f.Name()
switch n { switch n {
case "text": case textField:
text := document.NewTextField(n, f.ArrayPositions(), f.Value()) text := document.NewTextField(n, f.ArrayPositions(), f.Value())
doc.Text = string(text.Value()) doc.Text = string(text.Value())
//case "tags": case createdField:
// tags := document.NewTextField(n, f.ArrayPositions(), f.Value())
// doc.Tags = append(doc.Tags, string(tags.Value()))
case "created":
created := document.NewDateTimeFieldFromBytes(n, f.ArrayPositions(), f.Value()) created := document.NewDateTimeFieldFromBytes(n, f.ArrayPositions(), f.Value())
doc.Created, _ = created.DateTime() doc.Created, _ = created.DateTime()
} }
@ -124,14 +124,14 @@ func (i *Index) Search(search string) (results core.Results, err error) {
continue continue
} }
for fragField, frags := range hit.Fragments { for fragField, frags := range hit.Fragments {
if fragField == "tags" { if fragField == tagsField {
var t string var t string
for _, f := range frags { for _, f := range frags {
t += f t += f
} }
r.Tags = strings.ReplaceAll(strings.ReplaceAll(t, "<mark>", ""), "</mark>", "") r.Tags = strings.ReplaceAll(strings.ReplaceAll(t, "<mark>", ""), "</mark>", "")
} }
if fragField == "text" || fragField == "created" { if fragField == textField || fragField == createdField {
for _, f := range frags { for _, f := range frags {
r.HTML += template.HTML(f) r.HTML += template.HTML(f)
} }

View file

@ -11,10 +11,15 @@ import (
"github.com/blevesearch/bleve/mapping" "github.com/blevesearch/bleve/mapping"
) )
const (
bigram = "bigram_tokenfilter"
ngram = "fulltext_ngram"
)
func createMapping() (m *mapping.IndexMappingImpl, err error) { func createMapping() (m *mapping.IndexMappingImpl, err error) {
m = bleve.NewIndexMapping() m = bleve.NewIndexMapping()
err = m.AddCustomTokenFilter("bigram_tokenfilter", map[string]interface{}{ err = m.AddCustomTokenFilter(bigram, map[string]interface{}{
"type": edgengram.Name, "type": edgengram.Name,
"side": edgengram.FRONT, "side": edgengram.FRONT,
"min": 3.0, "min": 3.0,
@ -23,12 +28,12 @@ func createMapping() (m *mapping.IndexMappingImpl, err error) {
if err != nil { if err != nil {
return return
} }
err = m.AddCustomAnalyzer("fulltext_ngram", map[string]interface{}{ err = m.AddCustomAnalyzer(ngram, map[string]interface{}{
"type": custom.Name, "type": custom.Name,
"tokenizer": unicode.Name, "tokenizer": unicode.Name,
"token_filters": []string{ "token_filters": []string{
lowercase.Name, lowercase.Name,
"bigram_tokenfilter", bigram,
}, },
}) })
if err != nil { if err != nil {
@ -37,12 +42,12 @@ func createMapping() (m *mapping.IndexMappingImpl, err error) {
doc := bleve.NewDocumentMapping() doc := bleve.NewDocumentMapping()
tm := bleve.NewTextFieldMapping() tm := bleve.NewTextFieldMapping()
tm.Analyzer = "fulltext_ngram" tm.Analyzer = ngram
doc.AddFieldMappingsAt("text", tm) doc.AddFieldMappingsAt(textField, tm)
km := bleve.NewTextFieldMapping() tagm := bleve.NewTextFieldMapping()
doc.AddFieldMappingsAt("keyword", km) doc.AddFieldMappingsAt(tagsField, tagm)
cm := bleve.NewDateTimeFieldMapping() cm := bleve.NewDateTimeFieldMapping()
doc.AddFieldMappingsAt("created", cm) doc.AddFieldMappingsAt(createdField, cm)
m.AddDocumentMapping(docType, doc) m.AddDocumentMapping(docType, doc)
return return