51 lines
1.0 KiB
Go
51 lines
1.0 KiB
Go
package es
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"github.com/olivere/elastic/v7"
|
|
"reflect"
|
|
)
|
|
|
|
// Create 创建操作
|
|
func Create(index string, body []byte) error {
|
|
_, err := client.Index().
|
|
Index(index).
|
|
BodyJson(string(body)).
|
|
Do(context.Background())
|
|
return err
|
|
}
|
|
|
|
// Search 搜索操作
|
|
func Search(src interface{}, index string, params map[string]interface{}, page, pageSize int) ([]interface{}, error) {
|
|
query := elastic.NewBoolQuery()
|
|
|
|
for k, v := range params {
|
|
query.Should(elastic.NewMatchQuery(k, v))
|
|
}
|
|
service := client.Search().Index(index).Pretty(true).Query(query)
|
|
|
|
if page > 0 && pageSize > 0 {
|
|
// 游标分页
|
|
service.From((page - 1) * pageSize)
|
|
service.Size(pageSize)
|
|
}
|
|
result, err := service.Do(context.Background())
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
out := make([]interface{}, 0)
|
|
|
|
for _, hit := range result.Hits.Hits {
|
|
data := new(interface{})
|
|
reflect.DeepEqual(data, src)
|
|
|
|
if err = json.Unmarshal(hit.Source, data); err != nil {
|
|
return nil, err
|
|
}
|
|
out = append(out, data)
|
|
}
|
|
return out, err
|
|
}
|