2021-10-18 11:57:12 +08:00
|
|
|
package es
|
|
|
|
|
2021-12-23 10:33:31 +08:00
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"encoding/json"
|
|
|
|
"github.com/olivere/elastic/v7"
|
|
|
|
"reflect"
|
|
|
|
)
|
|
|
|
|
2021-12-23 17:43:27 +08:00
|
|
|
type (
|
|
|
|
// SearchParams 搜索参数
|
|
|
|
SearchParams struct {
|
2021-12-24 09:13:16 +08:00
|
|
|
TermParams map[string]interface{}
|
2021-12-23 17:43:27 +08:00
|
|
|
MustParams map[string]interface{}
|
|
|
|
ShouldParams map[string]interface{}
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
2021-12-23 10:33:31 +08:00
|
|
|
// Create 创建操作
|
2022-01-18 09:20:18 +08:00
|
|
|
func Create(index, id string, body []byte) error {
|
2021-12-23 10:33:31 +08:00
|
|
|
_, err := client.Index().
|
|
|
|
Index(index).
|
2022-01-18 09:20:18 +08:00
|
|
|
Id(id).
|
2021-12-23 10:33:31 +08:00
|
|
|
BodyJson(string(body)).
|
|
|
|
Do(context.Background())
|
|
|
|
return err
|
2021-12-09 16:17:23 +08:00
|
|
|
}
|
|
|
|
|
2022-01-18 09:20:18 +08:00
|
|
|
// Update 更新操作
|
2022-02-08 16:11:59 +08:00
|
|
|
func Update(index, id string, params map[string]interface{}) error {
|
|
|
|
scriptStr := ""
|
|
|
|
|
|
|
|
for k := range params {
|
|
|
|
scriptStr += "ctx._source." + k + " = params." + k + ";"
|
|
|
|
}
|
|
|
|
script := elastic.NewScript(scriptStr).Params(params)
|
|
|
|
|
2022-01-18 09:20:18 +08:00
|
|
|
_, err := client.Update().
|
|
|
|
Index(index).
|
|
|
|
Id(id).
|
2022-02-08 16:11:59 +08:00
|
|
|
Script(script).
|
|
|
|
//Doc(string(body)).
|
2022-01-18 09:20:18 +08:00
|
|
|
Do(context.Background())
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
2021-12-23 10:33:31 +08:00
|
|
|
// Search 搜索操作
|
2022-01-20 11:51:02 +08:00
|
|
|
func Search(src interface{}, index string, params *SearchParams, page, pageSize int) ([]interface{}, int64, error) {
|
2021-12-23 10:33:31 +08:00
|
|
|
query := elastic.NewBoolQuery()
|
|
|
|
|
2021-12-23 17:43:27 +08:00
|
|
|
if params != nil {
|
2021-12-24 09:13:16 +08:00
|
|
|
if params.TermParams != nil && len(params.TermParams) > 0 {
|
|
|
|
for k, v := range params.TermParams {
|
|
|
|
// 精确查找
|
|
|
|
query.Must(elastic.NewMatchPhraseQuery(k, v))
|
|
|
|
}
|
|
|
|
}
|
2021-12-23 17:43:27 +08:00
|
|
|
if params.MustParams != nil && len(params.MustParams) > 0 {
|
|
|
|
for k, v := range params.MustParams {
|
2021-12-24 09:13:16 +08:00
|
|
|
// 分词匹配
|
2021-12-23 17:43:27 +08:00
|
|
|
query.Must(elastic.NewMatchQuery(k, v))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if params.ShouldParams != nil && len(params.ShouldParams) > 0 {
|
|
|
|
for k, v := range params.ShouldParams {
|
2021-12-24 09:13:16 +08:00
|
|
|
// 分词匹配,查询到一个即可
|
2021-12-23 17:43:27 +08:00
|
|
|
query.Should(elastic.NewMatchQuery(k, v))
|
|
|
|
}
|
|
|
|
}
|
2021-12-23 10:33:31 +08:00
|
|
|
}
|
2021-12-23 17:43:27 +08:00
|
|
|
service := client.Search().Index(index)
|
2021-12-23 10:33:31 +08:00
|
|
|
|
|
|
|
if page > 0 && pageSize > 0 {
|
|
|
|
// 游标分页
|
2021-12-23 17:43:27 +08:00
|
|
|
service = service.From((page - 1) * pageSize).Size(pageSize)
|
2021-12-23 10:33:31 +08:00
|
|
|
}
|
2022-01-20 11:51:02 +08:00
|
|
|
result, err := service.TrackTotalHits(true).Pretty(true).Query(query).Do(context.Background())
|
2021-12-23 10:33:31 +08:00
|
|
|
|
|
|
|
if err != nil {
|
2022-01-20 11:51:02 +08:00
|
|
|
return nil, 0, err
|
2021-12-23 10:33:31 +08:00
|
|
|
}
|
|
|
|
out := make([]interface{}, 0)
|
|
|
|
|
2022-01-18 16:29:29 +08:00
|
|
|
_type := reflect.TypeOf(src).Elem()
|
2021-12-23 17:43:27 +08:00
|
|
|
|
2021-12-23 10:33:31 +08:00
|
|
|
for _, hit := range result.Hits.Hits {
|
2022-01-18 16:29:29 +08:00
|
|
|
_src := reflect.New(_type).Interface()
|
2021-12-23 10:33:31 +08:00
|
|
|
|
2022-01-18 16:29:29 +08:00
|
|
|
if err = json.Unmarshal(hit.Source, _src); err != nil {
|
2022-01-20 11:51:02 +08:00
|
|
|
return nil, 0, err
|
2021-12-23 10:33:31 +08:00
|
|
|
}
|
2022-01-18 16:29:29 +08:00
|
|
|
out = append(out, _src)
|
2021-12-23 10:33:31 +08:00
|
|
|
}
|
2022-01-20 11:51:02 +08:00
|
|
|
return out, result.Hits.TotalHits.Value, err
|
2021-10-18 11:57:12 +08:00
|
|
|
}
|
2021-12-23 17:43:27 +08:00
|
|
|
|
|
|
|
// Delete 删除操作
|
2022-01-18 16:29:29 +08:00
|
|
|
func Delete(index, id string) error {
|
|
|
|
_, err := client.Delete().Index(index).Do(context.Background())
|
2021-12-23 17:43:27 +08:00
|
|
|
return err
|
|
|
|
}
|