bugfixes and updated go.mod

This commit is contained in:
ston1th 2019-05-15 22:52:27 +02:00
commit 6e317eb08b
300 changed files with 53136 additions and 9719 deletions

View file

@ -7,11 +7,16 @@ import (
"git.giftfish.de/ston1th/godrop/v2"
"git.giftfish.de/ston1th/gowiki/pkg/core"
"github.com/blevesearch/bleve"
"github.com/blevesearch/bleve/mapping"
"html/template"
"os"
)
const maxSearchResult = 101
const (
maxSearchResult = 101
docType = "page"
)
type indexPage struct {
Title string `json:"title"`
@ -19,6 +24,10 @@ type indexPage struct {
Search string `json:"search"`
}
func (*indexPage) Type() string {
return docType
}
type Index struct {
i bleve.Index
}
@ -30,8 +39,22 @@ func NewIndex(path string) (i *Index, err error) {
return
}
if _, err = os.Stat(path); os.IsNotExist(err) {
mapping := bleve.NewIndexMapping()
bi, err = bleve.New(path, mapping)
err = os.Mkdir(path, 0700)
if err != nil {
err = errors.New("index: " + err.Error())
return
}
err = godrop.Unveil(path, "rwc")
if err != nil {
return
}
var m *mapping.IndexMappingImpl
m, err = createMapping()
if err != nil {
err = errors.New("mapping: " + err.Error())
return
}
bi, err = bleve.New(path, m)
if err != nil {
err = errors.New("index: " + err.Error())
return
@ -59,7 +82,7 @@ func (i *Index) Add(title, storeTitle, search string) error {
return err
}
}
return i.i.Index(storeTitle, indexPage{title, storeTitle, search})
return i.i.Index(storeTitle, &indexPage{title, storeTitle, search})
}
func (i *Index) Delete(storeTitle string) error {
@ -67,7 +90,7 @@ func (i *Index) Delete(storeTitle string) error {
}
func (i *Index) Search(search string) (results []core.Result, err error) {
req := bleve.NewSearchRequest(bleve.NewQueryStringQuery("title:" + search + " search:" + search))
req := bleve.NewSearchRequest(bleve.NewQueryStringQuery(search))
req.Highlight = bleve.NewHighlightWithStyle("html")
req.Size = maxSearchResult
res, err := i.i.Search(req)

51
pkg/index/mapping.go Normal file
View file

@ -0,0 +1,51 @@
// Copyright (C) 2019 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"
)
func createMapping() (m *mapping.IndexMappingImpl, err error) {
m = bleve.NewIndexMapping()
err = m.AddCustomTokenFilter("bigram_tokenfilter", map[string]interface{}{
"type": edgengram.Name,
"side": edgengram.FRONT,
"min": 3.0,
"max": 25.0,
})
if err != nil {
return
}
err = m.AddCustomAnalyzer("fulltext_ngram", map[string]interface{}{
"type": custom.Name,
"tokenizer": unicode.Name,
"token_filters": []string{
lowercase.Name,
"bigram_tokenfilter",
},
})
if err != nil {
return
}
doc := bleve.NewDocumentMapping()
ti := bleve.NewTextFieldMapping()
ti.Analyzer = "fulltext_ngram"
doc.AddFieldMappingsAt("title", ti)
st := bleve.NewTextFieldMapping()
st.Analyzer = "fulltext_ngram"
doc.AddFieldMappingsAt("store_title", st)
s := bleve.NewTextFieldMapping()
s.Analyzer = "fulltext_ngram"
doc.AddFieldMappingsAt("search", s)
m.AddDocumentMapping(docType, doc)
return
}