54 lines
1.2 KiB
Go
54 lines
1.2 KiB
Go
// Copyright (C) 2021 Marius Schellenberger
|
|
|
|
package index
|
|
|
|
import (
|
|
"github.com/blevesearch/bleve"
|
|
"github.com/blevesearch/bleve/analysis/analyzer/custom"
|
|
"github.com/blevesearch/bleve/analysis/token/edgengram"
|
|
"github.com/blevesearch/bleve/analysis/token/lowercase"
|
|
"github.com/blevesearch/bleve/analysis/tokenizer/unicode"
|
|
"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, map[string]interface{}{
|
|
"type": edgengram.Name,
|
|
"side": edgengram.FRONT,
|
|
"min": 3.0,
|
|
"max": 25.0,
|
|
})
|
|
if err != nil {
|
|
return
|
|
}
|
|
err = m.AddCustomAnalyzer(ngram, map[string]interface{}{
|
|
"type": custom.Name,
|
|
"tokenizer": unicode.Name,
|
|
"token_filters": []string{
|
|
lowercase.Name,
|
|
bigram,
|
|
},
|
|
})
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
doc := bleve.NewDocumentMapping()
|
|
tm := bleve.NewTextFieldMapping()
|
|
tm.Analyzer = ngram
|
|
doc.AddFieldMappingsAt(textField, tm)
|
|
tagm := bleve.NewTextFieldMapping()
|
|
doc.AddFieldMappingsAt(tagsField, tagm)
|
|
cm := bleve.NewDateTimeFieldMapping()
|
|
doc.AddFieldMappingsAt(createdField, cm)
|
|
|
|
m.AddDocumentMapping(docType, doc)
|
|
return
|
|
}
|