Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
杨树贤
/
search_server
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
d4d72263
authored
Jan 12, 2023
by
SUDPTDUBLXEROFX\Administrator
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
分类页
parent
cd2cb182
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
37 additions
and
35 deletions
service/query/optimum_query.go
service/query/optimum_query.go
View file @
d4d72263
...
@@ -15,25 +15,28 @@ https://ichunt.com/optimum-9987_1.html?ev=brand_12042^2660_128036||128037
...
@@ -15,25 +15,28 @@ https://ichunt.com/optimum-9987_1.html?ev=brand_12042^2660_128036||128037
@param attrs post 参数
@param attrs post 参数
@param types int 返回统计还是结果: 1单独返回统计 2单独返回查询结果
@param types int 返回统计还是结果: 1单独返回统计 2单独返回查询结果
*/
*/
func
GetOptimumAttrQuery
(
ctx
*
gin
.
Context
,
REQUEST_ATTR
*
map
[
string
][]
string
,
types
int
)
(
param
string
,
err
error
)
{
func
GetOptimumAttrQuery
(
ctx
*
gin
.
Context
,
REQUEST_ATTR
*
map
[
string
][]
string
,
types
int
)
(
param
string
,
err
error
)
{
query
:=
elastic
.
NewBoolQuery
()
query
:=
elastic
.
NewBoolQuery
()
//query1 := elastic.NewBoolQuery()
//query1 := elastic.NewBoolQuery()
//query2 := elastic.NewBoolQuery()
//query2 := elastic.NewBoolQuery()
//todo 2023.1.12 暂时去掉自营数据
query
.
MustNot
(
elastic
.
NewTermQuery
(
"supplier_name"
,
"a"
))
//一级分类查询
//一级分类查询
class_id1
:=
ctx
.
Request
.
FormValue
(
"class_id1"
)
class_id1
:=
ctx
.
Request
.
FormValue
(
"class_id1"
)
if
class_id1
!=
""
{
if
class_id1
!=
""
{
query
.
Must
(
elastic
.
NewTermQuery
(
"class_id1"
,
class_id1
))
query
.
Must
(
elastic
.
NewTermQuery
(
"class_id1"
,
class_id1
))
}
}
//二级分类查询
//二级分类查询
class_id2
:=
ctx
.
Request
.
FormValue
(
"class_id2"
)
class_id2
:=
ctx
.
Request
.
FormValue
(
"class_id2"
)
if
class_id2
!=
""
{
if
class_id2
!=
""
{
query
.
Must
(
elastic
.
NewTermQuery
(
"class_id2"
,
class_id2
))
query
.
Must
(
elastic
.
NewTermQuery
(
"class_id2"
,
class_id2
))
}
}
if
class_id1
==
""
&&
class_id2
==
""
{
if
class_id1
==
""
&&
class_id2
==
""
{
return
""
,
errors
.
New
(
"分类参数不得为空"
)
return
""
,
errors
.
New
(
"分类参数不得为空"
)
}
}
if
ctx
.
Request
.
FormValue
(
"avail_rank"
)
==
"1"
{
//只显示有货
if
ctx
.
Request
.
FormValue
(
"avail_rank"
)
==
"1"
{
//只显示有货
...
@@ -41,22 +44,22 @@ func GetOptimumAttrQuery(ctx *gin.Context,REQUEST_ATTR *map[string][]string,type
...
@@ -41,22 +44,22 @@ func GetOptimumAttrQuery(ctx *gin.Context,REQUEST_ATTR *map[string][]string,type
}
}
goods_name
:=
common
.
DrawLetterNum
(
ctx
.
Request
.
FormValue
(
"goods_name/condition"
))
goods_name
:=
common
.
DrawLetterNum
(
ctx
.
Request
.
FormValue
(
"goods_name/condition"
))
if
goods_name
!=
""
{
//型号搜索
if
goods_name
!=
""
{
//型号搜索
query
.
Must
(
elastic
.
NewMatchQuery
(
"goods_name"
,
goods_name
)
.
MinimumShouldMatch
(
"30%"
))
//模糊匹配
query
.
Must
(
elastic
.
NewMatchQuery
(
"goods_name"
,
goods_name
)
.
MinimumShouldMatch
(
"30%"
))
//模糊匹配
}
}
//存在属性查询
//存在属性查询
if
len
(
*
REQUEST_ATTR
)
>
0
{
//存在属性搜索
if
len
(
*
REQUEST_ATTR
)
>
0
{
//存在属性搜索
redisr
:=
gredis
.
Conn
(
"search_r"
)
redisr
:=
gredis
.
Conn
(
"search_r"
)
for
attr_name_id
,
attr_value_ids
:=
range
*
REQUEST_ATTR
{
for
attr_name_id
,
attr_value_ids
:=
range
*
REQUEST_ATTR
{
if
attr_name_id
==
"brand"
{
if
attr_name_id
==
"brand"
{
for
_
,
attr_value_id
:=
range
attr_value_ids
{
for
_
,
attr_value_id
:=
range
attr_value_ids
{
query
.
Must
(
elastic
.
NewTermQuery
(
"brand_id"
,
attr_value_id
))
query
.
Must
(
elastic
.
NewTermQuery
(
"brand_id"
,
attr_value_id
))
}
}
}
else
{
}
else
{
for
_
,
attr_value_id
:=
range
attr_value_ids
{
for
_
,
attr_value_id
:=
range
attr_value_ids
{
attr_name
,
_
:=
gredis
.
String
(
redisr
.
Do
(
"HGET"
,
config
.
Get
(
"redis_all.class_attr_by_id"
)
.
String
(),
attr_name_id
))
//查询唯一值,反查sku_id
attr_name
,
_
:=
gredis
.
String
(
redisr
.
Do
(
"HGET"
,
config
.
Get
(
"redis_all.class_attr_by_id"
)
.
String
(),
attr_name_id
))
//查询唯一值,反查sku_id
attr_value_name
,
_
:=
gredis
.
String
(
redisr
.
Do
(
"HGET"
,
config
.
Get
(
"redis_all.class_attr_value_by_id"
)
.
String
(),
attr_value_id
))
//查询唯一值,反查sku_id
attr_value_name
,
_
:=
gredis
.
String
(
redisr
.
Do
(
"HGET"
,
config
.
Get
(
"redis_all.class_attr_value_by_id"
)
.
String
(),
attr_value_id
))
//查询唯一值,反查sku_id
query
.
Must
(
elastic
.
NewNestedQuery
(
"attrs"
,
elastic
.
NewBoolQuery
()
.
Must
(
elastic
.
NewTermQuery
(
"attrs.attr_name"
,
attr_name
),
elastic
.
NewTermQuery
(
"attrs.attr_value"
,
attr_value_name
))))
query
.
Must
(
elastic
.
NewNestedQuery
(
"attrs"
,
elastic
.
NewBoolQuery
()
.
Must
(
elastic
.
NewTermQuery
(
"attrs.attr_name"
,
attr_name
),
elastic
.
NewTermQuery
(
"attrs.attr_value"
,
attr_value_name
))))
}
}
}
}
}
}
...
@@ -64,10 +67,10 @@ func GetOptimumAttrQuery(ctx *gin.Context,REQUEST_ATTR *map[string][]string,type
...
@@ -64,10 +67,10 @@ func GetOptimumAttrQuery(ctx *gin.Context,REQUEST_ATTR *map[string][]string,type
source
:=
elastic
.
NewSearchSource
()
source
:=
elastic
.
NewSearchSource
()
if
types
==
1
{
//单独返回属性统计
if
types
==
1
{
//单独返回属性统计
source
.
Aggregation
(
"brand_id"
,
elastic
.
NewTermsAggregation
()
.
Field
(
"brand_id"
)
.
Size
(
1000
))
source
.
Aggregation
(
"brand_id"
,
elastic
.
NewTermsAggregation
()
.
Field
(
"brand_id"
)
.
Size
(
1000
))
source
.
Aggregation
(
"attrs"
,
elastic
.
NewNestedAggregation
()
.
Path
(
"attrs"
)
.
source
.
Aggregation
(
"attrs"
,
elastic
.
NewNestedAggregation
()
.
Path
(
"attrs"
)
.
SubAggregation
(
"attr_name"
,
elastic
.
NewTermsAggregation
()
.
Field
(
"attrs.attr_name"
)
.
Size
(
5000
)
.
SubAggregation
(
"attr_name"
,
elastic
.
NewTermsAggregation
()
.
Field
(
"attrs.attr_name"
)
.
Size
(
5000
)
.
SubAggregation
(
"attr_value"
,
elastic
.
NewTermsAggregation
()
.
Field
(
"attrs.attr_value"
)
.
Size
(
5000
))))
SubAggregation
(
"attr_value"
,
elastic
.
NewTermsAggregation
()
.
Field
(
"attrs.attr_value"
)
.
Size
(
5000
))))
source
.
Size
(
0
)
source
.
Size
(
0
)
}
}
if
types
==
2
{
//不需要统计,返回分页数据
if
types
==
2
{
//不需要统计,返回分页数据
...
@@ -75,38 +78,38 @@ func GetOptimumAttrQuery(ctx *gin.Context,REQUEST_ATTR *map[string][]string,type
...
@@ -75,38 +78,38 @@ func GetOptimumAttrQuery(ctx *gin.Context,REQUEST_ATTR *map[string][]string,type
page_size
:=
ctx
.
Request
.
FormValue
(
"page_size"
)
page_size
:=
ctx
.
Request
.
FormValue
(
"page_size"
)
page_from
:=
0
page_from
:=
0
if
page
==
""
{
if
page
==
""
{
page
=
"1"
;
page
=
"1"
}
}
if
page_size
==
""
{
if
page_size
==
""
{
page_size
=
"10"
;
page_size
=
"10"
}
}
if
page
!=
"1"
{
if
page
!=
"1"
{
page_from
=
(
common
.
MyInt
(
page
)
-
1
)
*
common
.
MyInt
(
page_size
)
page_from
=
(
common
.
MyInt
(
page
)
-
1
)
*
common
.
MyInt
(
page_size
)
if
page_from
>
10000
{
if
page_from
>
10000
{
page_from
=
10000
;
page_from
=
10000
}
}
}
}
source
.
FetchSourceContext
(
elastic
.
NewFetchSourceContext
(
true
)
.
Include
(
"goods_id"
,
"attrs"
))
//显示字段
source
.
FetchSourceContext
(
elastic
.
NewFetchSourceContext
(
true
)
.
Include
(
"goods_id"
,
"attrs"
))
//显示字段
source
.
Size
(
common
.
MyInt
(
page_size
))
source
.
Size
(
common
.
MyInt
(
page_size
))
source
.
From
(
page_from
)
source
.
From
(
page_from
)
source
.
Sort
(
"supplier_name"
,
true
)
//true asc,自营数据在前
source
.
Sort
(
"supplier_name"
,
true
)
//true asc,自营数据在前
source
.
Sort
(
"sort"
,
false
)
//true asc,可购买在前
source
.
Sort
(
"sort"
,
false
)
//true asc,可购买在前
//排序
//排序
if
ctx
.
Request
.
FormValue
(
"stock_rank"
)
==
"1"
{
//库存排序,最多库存最前
if
ctx
.
Request
.
FormValue
(
"stock_rank"
)
==
"1"
{
//库存排序,最多库存最前
source
.
Sort
(
"stock"
,
false
)
//true asc
source
.
Sort
(
"stock"
,
false
)
//true asc
}
}
if
ctx
.
Request
.
FormValue
(
"stock_rank"
)
==
"2"
{
//库存排序,最少库存最前
if
ctx
.
Request
.
FormValue
(
"stock_rank"
)
==
"2"
{
//库存排序,最少库存最前
source
.
Sort
(
"stock"
,
true
)
//true asc
source
.
Sort
(
"stock"
,
true
)
//true asc
}
}
if
ctx
.
Request
.
FormValue
(
"single_rank"
)
==
"1"
{
//价格最高在前
if
ctx
.
Request
.
FormValue
(
"single_rank"
)
==
"1"
{
//价格最高在前
source
.
Sort
(
"lower_price"
,
false
)
//true asc
source
.
Sort
(
"lower_price"
,
false
)
//true asc
}
}
if
ctx
.
Request
.
FormValue
(
"single_rank"
)
==
"2"
{
//价格最高在后
if
ctx
.
Request
.
FormValue
(
"single_rank"
)
==
"2"
{
//价格最高在后
source
.
Sort
(
"lower_price"
,
true
)
//true asc
source
.
Sort
(
"lower_price"
,
true
)
//true asc
}
}
}
}
...
@@ -115,9 +118,10 @@ func GetOptimumAttrQuery(ctx *gin.Context,REQUEST_ATTR *map[string][]string,type
...
@@ -115,9 +118,10 @@ func GetOptimumAttrQuery(ctx *gin.Context,REQUEST_ATTR *map[string][]string,type
searchRequest
:=
elastic
.
NewSearchRequest
()
.
Source
(
source
)
searchRequest
:=
elastic
.
NewSearchRequest
()
.
Source
(
source
)
param
,
_
=
searchRequest
.
Body
()
param
,
_
=
searchRequest
.
Body
()
common
.
PrintDebugHtml
(
ctx
,
param
)
common
.
PrintDebugHtml
(
ctx
,
param
)
return
return
}
}
/*
/*
上面函数最终拼接的es查询:
上面函数最终拼接的es查询:
{
{
...
@@ -239,6 +243,4 @@ func GetOptimumAttrQuery(ctx *gin.Context,REQUEST_ATTR *map[string][]string,type
...
@@ -239,6 +243,4 @@ func GetOptimumAttrQuery(ctx *gin.Context,REQUEST_ATTR *map[string][]string,type
"size": 10
"size": 10
}
}
*/
*/
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment