···
"github.com/blevesearch/bleve/v2"
"github.com/blevesearch/bleve/v2/index/upsidedown"
11
+
"github.com/blevesearch/bleve/v2/mapping"
"github.com/blevesearch/bleve/v2/search/query"
"tangled.sh/tangled.sh/core/appview/db"
"tangled.sh/tangled.sh/core/appview/indexer/base36"
···
"tangled.sh/tangled.sh/core/appview/pagination"
21
+
issueIndexerDocType = "issueIndexerDocType"
···
log.Println("Initialized the issue indexer")
51
+
func generateIssueIndexMapping() (mapping.IndexMapping, error) {
52
+
mapping := bleve.NewIndexMapping()
53
+
docMapping := bleve.NewDocumentMapping()
55
+
textFieldMapping := bleve.NewTextFieldMapping()
56
+
textFieldMapping.Store = false
57
+
textFieldMapping.IncludeInAll = false
59
+
boolFieldMapping := bleve.NewBooleanFieldMapping()
60
+
boolFieldMapping.Store = false
61
+
boolFieldMapping.IncludeInAll = false
63
+
keywordFieldMapping := bleve.NewKeywordFieldMapping()
64
+
keywordFieldMapping.Store = false
65
+
keywordFieldMapping.IncludeInAll = false
67
+
// numericFieldMapping := bleve.NewNumericFieldMapping()
69
+
docMapping.AddFieldMappingsAt("title", textFieldMapping)
70
+
docMapping.AddFieldMappingsAt("body", textFieldMapping)
72
+
docMapping.AddFieldMappingsAt("repo_at", keywordFieldMapping)
73
+
docMapping.AddFieldMappingsAt("is_open", boolFieldMapping)
75
+
mapping.AddDocumentMapping(issueIndexerDocType, docMapping)
76
+
mapping.AddDocumentMapping("_all", bleve.NewDocumentDisabledMapping())
77
+
mapping.DefaultMapping = bleve.NewDocumentDisabledMapping()
func (ix *Indexer) intialize(_ context.Context) (bool, error) {
return false, errors.New("indexer is already initialized")
···
60
-
mapping := bleve.NewIndexMapping()
96
+
mapping, err := generateIssueIndexMapping()
indexer, err = bleve.New(ix.path, mapping)
···
dataList = append(dataList, &IssueData{
138
+
RepoAt: issue.RepoAt.String(),
144
+
log.Println(dataList[len(dataList)-1])
err = ix.Index(ctx, dataList...)
···
// IssueData data stored and will be indexed
161
+
RepoAt string `json:"repo_at"`
IssueID int `json:"issue_id"`
Title string `json:"title"`
Body string `json:"body"`
···
Comments []IssueCommentData `json:"comments"`
170
+
// Type returns the document type, for bleve's mapping.Classifier interface.
171
+
func (i *IssueData) Type() string {
172
+
return issueIndexerDocType
type IssueCommentData struct {
Body string `json:"body"`
···
matchAndQuery(opts.Keyword, "body"),
207
+
queries = append(queries, keywordFieldQuery(opts.RepoAt, "repo_at"))
queries = append(queries, boolFieldQuery(opts.IsOpen, "is_open"))
// TODO: append more queries
···
243
+
func keywordFieldQuery(keyword, field string) query.Query {
244
+
q := bleve.NewTermQuery(keyword)