Keep on bleving

This commit is contained in:
Justin Hawkins 2025-04-27 20:21:33 +09:30
parent 9b15528510
commit de90b9951a
4 changed files with 35 additions and 22 deletions

View File

@ -76,6 +76,7 @@ func (m *BookmarkManager) ListBookmarks() ([]entity.Bookmark, error) {
if err != nil {
panic(err)
}
log.Printf("found %d bookmarks", len(bookmarks))
return bookmarks, nil
}
@ -112,6 +113,13 @@ func (m *BookmarkManager) LoadBookmarkByID(id uint64) entity.Bookmark {
func (m *BookmarkManager) Search(opts SearchOptions) ([]entity.Bookmark, error) {
found := []entity.Bookmark{}
log.Printf("search with query: %s", opts.Query)
if opts.Sort != "" {
panic("unimplemented sort")
}
if len(opts.Tags) > 0 {
panic("unimplemented tags")
}
sr, err := m.db.bleve.Search(bleve.NewSearchRequest(
query.NewQueryStringQuery(opts.Query)))
@ -157,7 +165,7 @@ func (m *BookmarkManager) ScrapeAndIndex(bm *entity.Bookmark) error {
func (m *BookmarkManager) UpdateIndexForBookmark(bm *entity.Bookmark) {
log.Printf("inserting into bleve data for %s", bm.URL)
err := m.db.bleve.Index(fmt.Sprint(bm.ID), bm.Info)
err := m.db.bleve.Index(fmt.Sprint(bm.ID), bm)
if err != nil {
panic(err)
}

View File

@ -5,6 +5,7 @@ import (
"time"
"github.com/blevesearch/bleve/v2"
"github.com/blevesearch/bleve/v2/mapping"
"github.com/tardisx/linkwallet/entity"
bolthold "github.com/timshannon/bolthold"
)
@ -26,20 +27,7 @@ func (db *DB) Open(path string) error {
blevePath := path + ".bleve"
indexMapping := bleve.NewIndexMapping()
pageInfoMapping := bleve.NewDocumentMapping()
indexMapping.AddDocumentMapping("pageinfo", pageInfoMapping)
// entity.PageInfo
titleFieldMapping := bleve.NewTextFieldMapping()
titleFieldMapping.Analyzer = "en"
pageInfoMapping.AddFieldMappingsAt("Title", titleFieldMapping)
rawTextFieldMapping := bleve.NewTextFieldMapping()
rawTextFieldMapping.Analyzer = "en"
pageInfoMapping.AddFieldMappingsAt("RawText", rawTextFieldMapping)
index, err := bleve.New(blevePath, indexMapping)
index, err := bleve.New(blevePath, createIndexMapping())
if err != nil {
if err == bleve.ErrorIndexPathExists {
@ -58,6 +46,24 @@ func (db *DB) Open(path string) error {
return nil
}
func createIndexMapping() mapping.IndexMapping {
indexMapping := bleve.NewIndexMapping()
pageInfoMapping := bleve.NewDocumentMapping()
pageInfoMapping.AddFieldMappingsAt("Title", bleve.NewTextFieldMapping())
pageInfoMapping.AddFieldMappingsAt("Size", bleve.NewNumericFieldMapping())
pageInfoMapping.AddFieldMappingsAt("RawText", bleve.NewTextFieldMapping())
bookmarkMapping := bleve.NewDocumentMapping()
bookmarkMapping.AddFieldMappingsAt("URL", bleve.NewTextFieldMapping())
bookmarkMapping.AddFieldMappingsAt("Tags", bleve.NewTextFieldMapping())
bookmarkMapping.AddSubDocumentMapping("Info", pageInfoMapping)
indexMapping.AddDocumentMapping("bookmark", bookmarkMapping)
return indexMapping
}
func (db *DB) Close() {
db.store.Close()
}

View File

@ -12,9 +12,7 @@
hx-indicator="#htmx-indicator-search" id="manage-search" />
</div>
</div>
{{ template "tags_widget.html" . }}
{{ template "manage_results.html" . }}
</form>
</div>

View File

@ -136,14 +136,15 @@ func Create(bmm *db.BookmarkManager, cmm *db.ConfigManager) *Server {
r.POST("/manage/results", func(c *gin.Context) {
query := c.PostForm("query")
tags := []string{}
sort := c.Query("sort")
if c.PostForm("tags_hidden") != "" {
tags = strings.Split(c.PostForm("tags_hidden"), "|")
bookmarks := []entity.Bookmark{}
if query == "" {
bookmarks, _ = bmm.ListBookmarks()
} else {
bookmarks, _ = bmm.Search(db.SearchOptions{Query: query, Sort: sort})
}
allBookmarks, _ := bmm.Search(db.SearchOptions{Query: query, Tags: tags, Sort: sort})
meta := gin.H{"config": config, "bookmarks": allBookmarks}
meta := gin.H{"config": config, "bookmarks": bookmarks}
colTitle := &ColumnInfo{Name: "Title/URL", Param: "title"}
colCreated := &ColumnInfo{Name: "Created", Param: "created", Class: "show-for-large"}