forked from forgejo/forgejo
Issue search support elasticsearch (#9428)
* Issue search support elasticsearch * Fix lint * Add indexer name on app.ini * add a warnning on SearchIssuesByKeyword * improve code
This commit is contained in:
parent
17656021f1
commit
5dbf36f356
286 changed files with 57032 additions and 25 deletions
90
vendor/github.com/olivere/elastic/v7/suggest_field.go
generated
vendored
Normal file
90
vendor/github.com/olivere/elastic/v7/suggest_field.go
generated
vendored
Normal file
|
@ -0,0 +1,90 @@
|
|||
// Copyright 2012-present Oliver Eilhard. All rights reserved.
|
||||
// Use of this source code is governed by a MIT-license.
|
||||
// See http://olivere.mit-license.org/license.txt for details.
|
||||
|
||||
package elastic
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
)
|
||||
|
||||
// SuggestField can be used by the caller to specify a suggest field
|
||||
// at index time. For a detailed example, see e.g.
|
||||
// https://www.elastic.co/blog/you-complete-me.
|
||||
type SuggestField struct {
|
||||
inputs []string
|
||||
weight int
|
||||
contextQueries []SuggesterContextQuery
|
||||
}
|
||||
|
||||
func NewSuggestField(input ...string) *SuggestField {
|
||||
return &SuggestField{
|
||||
inputs: input,
|
||||
weight: -1,
|
||||
}
|
||||
}
|
||||
|
||||
func (f *SuggestField) Input(input ...string) *SuggestField {
|
||||
if f.inputs == nil {
|
||||
f.inputs = make([]string, 0)
|
||||
}
|
||||
f.inputs = append(f.inputs, input...)
|
||||
return f
|
||||
}
|
||||
|
||||
func (f *SuggestField) Weight(weight int) *SuggestField {
|
||||
f.weight = weight
|
||||
return f
|
||||
}
|
||||
|
||||
func (f *SuggestField) ContextQuery(queries ...SuggesterContextQuery) *SuggestField {
|
||||
f.contextQueries = append(f.contextQueries, queries...)
|
||||
return f
|
||||
}
|
||||
|
||||
// MarshalJSON encodes SuggestField into JSON.
|
||||
func (f *SuggestField) MarshalJSON() ([]byte, error) {
|
||||
source := make(map[string]interface{})
|
||||
|
||||
if f.inputs != nil {
|
||||
switch len(f.inputs) {
|
||||
case 1:
|
||||
source["input"] = f.inputs[0]
|
||||
default:
|
||||
source["input"] = f.inputs
|
||||
}
|
||||
}
|
||||
|
||||
if f.weight >= 0 {
|
||||
source["weight"] = f.weight
|
||||
}
|
||||
|
||||
switch len(f.contextQueries) {
|
||||
case 0:
|
||||
case 1:
|
||||
src, err := f.contextQueries[0].Source()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
source["contexts"] = src
|
||||
default:
|
||||
ctxq := make(map[string]interface{})
|
||||
for _, query := range f.contextQueries {
|
||||
src, err := query.Source()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
m, ok := src.(map[string]interface{})
|
||||
if !ok {
|
||||
return nil, errors.New("SuggesterContextQuery must be of type map[string]interface{}")
|
||||
}
|
||||
for k, v := range m {
|
||||
ctxq[k] = v
|
||||
}
|
||||
}
|
||||
source["contexts"] = ctxq
|
||||
}
|
||||
|
||||
return json.Marshal(source)
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue