work in progress
This commit is contained in:
parent
38f7c31517
commit
07ff5ccffb
23 changed files with 228 additions and 240 deletions
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright (C) 2017 Marius Schellenberger
|
||||
// Copyright (C) 2018 Marius Schellenberger
|
||||
|
||||
package index
|
||||
|
||||
|
|
@ -6,13 +6,19 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
|
||||
"git.giftfish.de/ston1th/gowiki/pkg/core"
|
||||
"github.com/blevesearch/bleve"
|
||||
"github.com/blevesearch/bleve/document"
|
||||
// "github.com/blevesearch/bleve/document"
|
||||
)
|
||||
|
||||
const (
|
||||
maxSearchResult = 100
|
||||
)
|
||||
|
||||
type indexPage struct {
|
||||
Title string `json:"title"`
|
||||
Search string `json:"search"`
|
||||
Title string `json:"title"`
|
||||
StoreTitle string `json:"store_title"`
|
||||
Search string `json:"search"`
|
||||
}
|
||||
|
||||
func indexErr(i interface{}) error {
|
||||
|
|
@ -32,21 +38,14 @@ func NewIndex(path string) (i *Index, err error) {
|
|||
err = indexErr(err)
|
||||
return
|
||||
}
|
||||
i = &Index{index: bi}
|
||||
_, err = i.Index(indexName, welcome, defUser, true)
|
||||
if err != nil {
|
||||
err = indexErr(err)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
bi, err = bleve.Open(path)
|
||||
if err != nil {
|
||||
err = indexErr(err)
|
||||
return
|
||||
}
|
||||
i = &Index{index: bi}
|
||||
}
|
||||
i.cache = NewIndexCache()
|
||||
i = &Index{i: bi}
|
||||
return
|
||||
}
|
||||
|
||||
|
|
@ -54,7 +53,7 @@ func (i *Index) Close() error {
|
|||
return i.i.Close()
|
||||
}
|
||||
|
||||
func (i *Index) Add(title, search string) error {
|
||||
func (i *Index) Add(title, storeTitle, search string) error {
|
||||
doc, _ := i.i.Document(title)
|
||||
if doc != nil {
|
||||
err := i.Delete(title)
|
||||
|
|
@ -62,19 +61,14 @@ func (i *Index) Add(title, search string) error {
|
|||
return err
|
||||
}
|
||||
}
|
||||
return i.i.Index(title, indexPage{title, search})
|
||||
return i.i.Index(storeTitle, indexPage{title, storeTitle, search})
|
||||
}
|
||||
|
||||
func (i *Index) Delete(title string) error {
|
||||
return i.i.Delete(title)
|
||||
func (i *Index) Delete(storeTitle string) error {
|
||||
return i.i.Delete(storeTitle)
|
||||
}
|
||||
|
||||
type Result struct {
|
||||
Title string
|
||||
Text string
|
||||
}
|
||||
|
||||
func (i *Index) Search(search string) (results []Result, err error) {
|
||||
func (i *Index) Search(search string) (results []core.Result, err error) {
|
||||
req := bleve.NewSearchRequest(bleve.NewQueryStringQuery("title:" + search + " search:" + search))
|
||||
req.Highlight = bleve.NewHighlightWithStyle("html")
|
||||
req.Size = maxSearchResult
|
||||
|
|
@ -86,17 +80,22 @@ func (i *Index) Search(search string) (results []Result, err error) {
|
|||
if hit == nil {
|
||||
continue
|
||||
}
|
||||
title := hit.ID
|
||||
text := ""
|
||||
r := core.Result{Title: hit.ID}
|
||||
for fragField, frags := range hit.Fragments {
|
||||
if fragField == "store_title" {
|
||||
for _, f := range frags {
|
||||
r.StoreTitle += f
|
||||
}
|
||||
break
|
||||
}
|
||||
if fragField == "title" || fragField == "search" {
|
||||
for _, f := range frags {
|
||||
text += f
|
||||
r.Text += f
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
results = append(results, Result{title, text})
|
||||
results = append(results, r)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue