76 lines
2.2 KiB
Go
76 lines
2.2 KiB
Go
package search
|
|
|
|
import (
|
|
"log/slog"
|
|
|
|
"github.com/blevesearch/bleve/v2"
|
|
"github.com/blevesearch/bleve/v2/mapping"
|
|
"github.com/mlogclub/simple/common/jsons"
|
|
)
|
|
|
|
type TopicDocument struct {
|
|
Id int64 `json:"id"`
|
|
NodeId int64 `json:"nodeId"`
|
|
UserId int64 `json:"userId"`
|
|
Nickname string `json:"nickname"`
|
|
Title string `json:"title"`
|
|
Content string `json:"content"`
|
|
Tags []string `json:"tags"`
|
|
Recommend bool `json:"recommend"`
|
|
Status int `json:"status"`
|
|
CreateTime int64 `json:"createTime"`
|
|
}
|
|
|
|
func (t *TopicDocument) ToStr() string {
|
|
str, err := jsons.ToStr(t)
|
|
if err != nil {
|
|
slog.Error(err.Error(), slog.Any("err", err))
|
|
}
|
|
return str
|
|
}
|
|
|
|
func newIndex(indexPath string) bleve.Index {
|
|
mapping := bleve.NewIndexMapping()
|
|
mapping.DefaultMapping.AddFieldMappingsAt("id", newNumField())
|
|
mapping.DefaultMapping.AddFieldMappingsAt("nodeId", newNumField())
|
|
mapping.DefaultMapping.AddFieldMappingsAt("userId", newNumField())
|
|
mapping.DefaultMapping.AddFieldMappingsAt("nickname", newTextField())
|
|
mapping.DefaultMapping.AddFieldMappingsAt("title", newTextField())
|
|
mapping.DefaultMapping.AddFieldMappingsAt("content", newTextField())
|
|
mapping.DefaultMapping.AddFieldMappingsAt("tags", newTextField())
|
|
mapping.DefaultMapping.AddFieldMappingsAt("recommend", newBoolField())
|
|
mapping.DefaultMapping.AddFieldMappingsAt("status", newNumField())
|
|
mapping.DefaultMapping.AddFieldMappingsAt("createTime", newNumField())
|
|
|
|
index, err := bleve.New(indexPath, mapping)
|
|
if err != nil {
|
|
slog.Info("创建索引失败", slog.Any("err", err))
|
|
}
|
|
return index
|
|
}
|
|
|
|
func newTextField() *mapping.FieldMapping {
|
|
textField := bleve.NewTextFieldMapping()
|
|
// textField.Store = true
|
|
textField.Index = true
|
|
textField.IncludeTermVectors = true
|
|
textField.Analyzer = "en"
|
|
return textField
|
|
}
|
|
|
|
func newNumField() *mapping.FieldMapping {
|
|
numField := bleve.NewNumericFieldMapping()
|
|
// numField.Store = true
|
|
numField.Index = true
|
|
numField.DocValues = true
|
|
return numField
|
|
}
|
|
|
|
func newBoolField() *mapping.FieldMapping {
|
|
boolField := bleve.NewBooleanFieldMapping()
|
|
// boolField.Store = true
|
|
boolField.Index = true
|
|
boolField.DocValues = true
|
|
return boolField
|
|
}
|