代码拉取完成,页面将自动刷新
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
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。