1 Star 0 Fork 0

water/goweb

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
page_es_query.go 9.72 KB
一键复制 编辑 原始数据 按行查看 历史
leijmdas 提交于 2个月前 . add
package pagees
import (
"gitee.com/leijmdas/goweb/gopage/base"
dto2 "gitee.com/leijmdas/goweb/gopage/dto"
"github.com/olivere/elastic/v7"
"github.com/sirupsen/logrus"
)
/*
@Title 文件名称: page_es_query.go
@Description 描述: PageEsQuery
@Author 作者: leijianming@163.com 时间(2024-02-22 22:38:21)
@Update 作者: leijianming@163.com 时间(2024-02-21 22:38:21)
*/
//https://blog.csdn.net/K346K346/article/details/120906440
//rangeQuery := elastic.NewRangeQuery("age").Gte(18).Lte(35)
type PageEsQuery struct {
pageEsRequest *PageEsRequest `json:"page_es_request"`
//queryGroups map[int][]elastic.EsQuery
}
func NewPageEsQuery(pageReq *PageEsRequest) *PageEsQuery {
return &PageEsQuery{
pageEsRequest: pageReq,
// queryGroups: make(map[int][]elastic.EsQuery),
}
}
func (this *PageEsQuery) BuildBoolQuery(esreq *PageEsRequest) *elastic.BoolQuery {
var queries = []elastic.Query{}
queries = append(queries, this.IdQuery()...)
queries = append(queries, this.IdsQuery()...)
queries = append(queries, this.FuzzyQuery()...)
queries = append(queries, this.MatchQuery()...)
queries = append(queries, this.MatchPhrase()...)
queries = append(queries, this.MatchAllQuery()...)
queries = append(queries, this.TermQuery()...)
queries = append(queries, this.TermsQuery()...)
queries = append(queries, this.RangeQuery()...)
queries = append(queries, this.WildcardQuery()...)
queries = append(queries, this.RegexpQuery()...)
if len(queries) == 0 {
return nil
}
boolQuery := elastic.NewBoolQuery()
//if len(queries) == 1 && len(this.pageEsRequest.PageEsRequests) == 0 { // searchService.EsQuery(queries[0])
//}
var fquery = func(boolQuery *elastic.BoolQuery, req *PageEsRequest) *elastic.BoolQuery {
boolQuery.Must(req.MustQuery...)
boolQuery.MustNot(req.MustnotQuery...)
boolQuery.Filter(req.FilterQuery...)
boolQuery.Should(req.ShouldQuery...)
return boolQuery
}
var i = 0
for _, v := range esreq.PageEsRequests {
var eqs = NewPageEsQuery(v)
var nestBoolQuery = eqs.BuildBoolQuery(v)
fquery(nestBoolQuery, v)
if this.pageEsRequest.PageEsBoolTypes[i] == base.EsTypeMust {
boolQuery.Must(nestBoolQuery)
} else if this.pageEsRequest.PageEsBoolTypes[i] == base.EsTypeMustNot {
boolQuery.MustNot(nestBoolQuery)
} else if this.pageEsRequest.PageEsBoolTypes[i] == base.EsTypeShould {
boolQuery.Should(nestBoolQuery)
} else if this.pageEsRequest.PageEsBoolTypes[i] == base.EsTypeFilter {
boolQuery.Filter(nestBoolQuery)
} else {
boolQuery.Filter(nestBoolQuery)
}
i++
}
return fquery(boolQuery, esreq)
}
func (this *PageEsQuery) BuildQuery() *elastic.BoolQuery {
var queries = []elastic.Query{}
queries = append(queries, this.IdQuery()...)
queries = append(queries, this.IdsQuery()...)
queries = append(queries, this.FuzzyQuery()...)
queries = append(queries, this.MatchQuery()...)
queries = append(queries, this.MatchPhrase()...)
queries = append(queries, this.MatchAllQuery()...)
queries = append(queries, this.TermQuery()...)
queries = append(queries, this.TermsQuery()...)
queries = append(queries, this.RangeQuery()...)
queries = append(queries, this.WildcardQuery()...)
queries = append(queries, this.RegexpQuery()...)
if len(queries) == 0 {
return nil
}
if len(queries) == 1 && len(this.pageEsRequest.PageEsRequests) == 0 { // searchService.EsQuery(queries[0])
// return queries[0]
}
boolQuery := elastic.NewBoolQuery()
var fquery = func(boolQuery *elastic.BoolQuery, queries ...elastic.Query) *elastic.BoolQuery {
if this.pageEsRequest.IfMust() {
boolQuery.Must(queries...)
} else if this.pageEsRequest.IfFilter() {
boolQuery.Filter(queries...)
} else if this.pageEsRequest.IfMustNot() {
boolQuery.MustNot(queries...)
} else if this.pageEsRequest.IfShould() {
boolQuery.Should(queries...)
} else {
boolQuery.Filter(queries...)
}
return boolQuery
}
for _, v := range this.pageEsRequest.PageEsRequests {
var eqs = NewPageEsQuery(v)
queries = append(queries, eqs.BuildQuery())
}
return fquery(boolQuery, queries...)
}
func (this *PageEsQuery) IdQuery() []elastic.Query {
var queries = []elastic.Query{}
for _, v := range this.pageEsRequest.Fields {
if v.OpType == this.pageEsRequest.FindFieldSign(base.EsId) {
var svalues = []string{}
for _, vv := range v.Values {
svalues = append(svalues, vv.(string))
}
q := this.pageEsRequest.AddGroup(v, elastic.NewIdsQuery(svalues...))
queries = append(queries, q)
return queries
}
}
return queries
}
func (this *PageEsQuery) IdsQuery() []elastic.Query {
var qs = []elastic.Query{}
for _, v := range this.pageEsRequest.Fields {
if v.OpType == this.pageEsRequest.FindFieldSign(base.EsIds) {
var svalues = []string{}
for _, vv := range v.Values {
svalues = append(svalues, vv.(string))
}
var q = this.pageEsRequest.AddGroup(v, elastic.NewIdsQuery().Ids(svalues...))
qs = append(qs, q)
return qs
}
}
return qs
}
// match term
// keyword
func (this *PageEsQuery) TermQuery() []elastic.Query {
var qs = []elastic.Query{}
for _, v := range this.pageEsRequest.Fields {
if v.OpType == this.pageEsRequest.FindFieldSign(base.EsTerm) {
var q = this.pageEsRequest.AddGroup(v, elastic.NewTermQuery(v.Field, v.Values[0]))
qs = append(qs, q)
}
}
return qs
}
func (this *PageEsQuery) TermsQuery() []elastic.Query {
var qs = []elastic.Query{}
for _, v := range this.pageEsRequest.Fields {
if v.OpType == this.pageEsRequest.FindFieldSign(base.In) {
q := this.pageEsRequest.AddGroup(v, elastic.NewTermsQuery(v.Field, v.Values...))
qs = append(qs, q)
}
logrus.Info(v.OpType, this.pageEsRequest.FindFieldSign(base.EsTerms))
if v.OpType == this.pageEsRequest.FindFieldSign(base.EsTerms) {
var q = this.pageEsRequest.AddGroup(v, elastic.NewTermsQuery(v.Field, v.Values...))
qs = append(qs, q) //elastic.NewTermsQuery(v.Field, v.Values...))
}
}
return qs
}
func (this *PageEsQuery) FuzzyQuery() []elastic.Query {
var queries = []elastic.Query{}
for _, v := range this.pageEsRequest.Fields {
if v.OpType == this.pageEsRequest.FindFieldSign(base.EsFuzzy) {
q := this.AddGroup(v, elastic.NewFuzzyQuery(v.Field, v.Values[0].(string)))
queries = append(queries, q)
}
if v.OpType == this.pageEsRequest.FindFieldSign(base.Like) {
q := this.pageEsRequest.AddGroup(v, elastic.NewFuzzyQuery(v.Field, v.Values[0].(string)))
queries = append(queries, q)
}
}
return queries
}
func (this *PageEsQuery) AddGroup(field *dto2.QueryField, query elastic.Query) elastic.Query {
return this.pageEsRequest.AddGroup(field, query)
}
func (this *PageEsQuery) MatchAllQuery() []elastic.Query {
var qs = []elastic.Query{}
for _, v := range this.pageEsRequest.Fields {
if v.OpType == this.pageEsRequest.FindFieldSign(base.EsMatchAll) {
var qry = this.AddGroup(v, elastic.NewMatchAllQuery())
qs = append(qs, qry)
return qs
}
}
return qs
}
func (this *PageEsQuery) RegexpQuery() []elastic.Query {
var qs = []elastic.Query{}
for _, v := range this.pageEsRequest.Fields {
if v.OpType == this.pageEsRequest.FindFieldSign(base.EsRegexp) {
var q = this.AddGroup(v, elastic.NewRegexpQuery(v.Field, v.Values[0].(string)))
qs = append(qs, q)
}
}
return qs
}
func (this *PageEsQuery) WildcardQuery() []elastic.Query {
var qs = []elastic.Query{}
for _, v := range this.pageEsRequest.Fields {
if v.OpType == this.pageEsRequest.FindFieldSign(base.EsWildcard) {
q := this.AddGroup(v, elastic.NewWildcardQuery(v.Field, v.Values[0].(string)))
qs = append(qs, q)
}
}
return qs
}
func (this *PageEsQuery) MatchPhrase() []elastic.Query {
var queries = []elastic.Query{}
for _, v := range this.pageEsRequest.Fields {
if v.OpType == this.pageEsRequest.FindFieldSign(base.EsMatchPhrase) {
var q = this.AddGroup(v, elastic.NewMatchPhraseQuery(v.Field, v.Values[0].(string)))
queries = append(queries, q)
}
}
return queries
}
// text
func (this *PageEsQuery) MatchQuery() []elastic.Query {
var queries = []elastic.Query{}
for _, v := range this.pageEsRequest.Fields {
if v.OpType == this.pageEsRequest.FindFieldSign(base.Eq) {
var q = this.AddGroup(v, elastic.NewMatchQuery(v.Field, v.Values[0].(string)).Operator("and"))
queries = append(queries, q)
}
if v.OpType == this.pageEsRequest.FindFieldSign(base.EsMatch) {
var q = this.AddGroup(v, elastic.NewMatchQuery(v.Field, v.Values[0].(string)).Operator("and"))
queries = append(queries, q)
}
}
return queries
}
func (this *PageEsQuery) RangeQuery() []elastic.Query {
var quries = []elastic.Query{}
for _, v := range this.pageEsRequest.Fields {
if v.OpType == this.pageEsRequest.FindFieldSign(base.Lt) {
var q = this.AddGroup(v, elastic.NewRangeQuery(v.Field).Lt(v.Values[0]))
quries = append(quries, q)
}
if v.OpType == this.pageEsRequest.FindFieldSign(base.Le) {
var q = this.AddGroup(v, elastic.NewRangeQuery(v.Field).Lte(v.Values[0]))
quries = append(quries, q)
}
if v.OpType == this.pageEsRequest.FindFieldSign(base.Gt) {
var q = this.AddGroup(v, elastic.NewRangeQuery(v.Field).Gt(v.Values[0]))
quries = append(quries, q)
}
if v.OpType == this.pageEsRequest.FindFieldSign(base.Ge) {
var q = this.AddGroup(v, elastic.NewRangeQuery(v.Field).Gte(v.Values[0]))
quries = append(quries, q)
}
if v.OpType == this.pageEsRequest.FindFieldSign(base.Between) {
var q = this.AddGroup(v, elastic.NewRangeQuery(v.Field).Gte(v.Values[0]).Lte(v.Values[1]))
quries = append(quries, q)
}
if v.OpType == this.pageEsRequest.FindFieldSign(base.NotBetween) {
var q = this.AddGroup(v, elastic.NewRangeQuery(v.Field).Gt(v.Values[1]).Lt(v.Values[0]))
quries = append(quries, q)
}
if v.OpType == this.pageEsRequest.FindFieldSign(base.EsRange) {
var q = this.AddGroup(v, elastic.NewRangeQuery(v.Field).Gte(v.Values[0]).Lte(v.Values[1]))
quries = append(quries, q)
}
}
return quries
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/leijmdas/goweb.git
git@gitee.com:leijmdas/goweb.git
leijmdas
goweb
goweb
v1.2.7

搜索帮助