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
64a90538
authored
Jul 24, 2020
by
孙龙
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
up
parent
4327d17d
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
149 additions
and
95 deletions
controller/ziyin_controller.go
pkg/common/function.go
routes/router.go
service/ziyin_service.go
controller/ziyin_controller.go
View file @
64a90538
...
...
@@ -4,6 +4,7 @@ import (
"fmt"
"github.com/gin-gonic/gin"
"search_server/model"
"search_server/pkg/common"
"search_server/service"
"strings"
)
...
...
@@ -34,3 +35,18 @@ func Zyh(ctx *gin.Context){
//fmt.Printf("%+v",zyhResponse)
ctx
.
JSON
(
200
,
zyhResponse
)
}
func
Index
(
ctx
*
gin
.
Context
){
zyhRequest
:=
make
(
map
[
string
]
string
,
0
);
zyhResponse
:=
&
model
.
ZyhResponse
{}
ctx
.
MultipartForm
()
for
requestName
,
requstValue
:=
range
ctx
.
Request
.
Form
{
if
requstValue
[
0
]
!=
""
{
zyhRequest
[
requestName
]
=
strings
.
TrimSpace
(
requstValue
[
0
])
}
}
zyServiceImpl
:=
service
.
NewZyServiceImpl
()
zyhResponse
=
zyServiceImpl
.
Index
(
ctx
,
zyhRequest
)
common
.
Output
(
int
(
zyhResponse
.
ErrorCode
),
zyhResponse
.
ErrorMsg
,
zyhResponse
.
Data
)
return
}
\ No newline at end of file
pkg/common/function.go
View file @
64a90538
...
...
@@ -12,6 +12,7 @@ import (
"search_server/middleware"
"search_server/pkg/config"
"search_server/pkg/vars"
"sort"
"strconv"
"strings"
"time"
...
...
@@ -323,3 +324,22 @@ func RemoveSliceString(s []string, i string) []string {
}
return
b
}
//map排序
func
MapSort
(
mapList
map
[
int
]
int
)
[]
int
{
var
(
keys
[]
int
newList
[]
int
)
newList
=
make
([]
int
,
0
)
for
_
,
v
:=
range
mapList
{
keys
=
append
(
keys
,
v
)
}
sort
.
Ints
(
keys
)
for
_
,
k
:=
range
keys
{
newList
=
append
(
newList
,
mapList
[
k
])
}
return
newList
}
\ No newline at end of file
routes/router.go
View file @
64a90538
...
...
@@ -21,6 +21,8 @@ func InitRouter() *gin.Engine {
r
.
POST
(
"/search/bom/recommend"
,
controller
.
Recommend
)
r
.
POST
(
"search/ZiYing/zyh"
,
controller
.
Zyh
)
r
.
GET
(
"search/ZiYing/zyh"
,
controller
.
Zyh
)
r
.
GET
(
"search/ZiYing/index"
,
controller
.
Index
)
r
.
POST
(
"search/ZiYing/index"
,
controller
.
Index
)
r
.
POST
(
"search/mouser/GetMouserData"
,
controller
.
GetMouserData
)
r
.
GET
(
"search/mouser/GetMouserData"
,
controller
.
GetMouserData
)
...
...
service/ziyin_service.go
View file @
64a90538
...
...
@@ -37,7 +37,7 @@ func (this *ZyServiceImpl) Zyh(ctx *gin.Context, req map[string]string) (rsp *mo
need_aggs
bool
_type
byte
)
isAdmin
=
tru
e
isAdmin
=
fals
e
if
req
[
"need_aggs"
]
==
"1"
{
need_aggs
=
true
}
else
{
...
...
@@ -137,6 +137,12 @@ func zy(req map[string]string,_type byte,isCheck byte) (rsp *model.ZyhResponse){
return
rsp
}
func
(
this
*
ZyServiceImpl
)
Index
(
ctx
*
gin
.
Context
,
req
map
[
string
]
string
)
(
rsp
*
model
.
ZyhResponse
){
req2
:=
req
zy_orgin_search
=
common
.
CopyMapString
(
req
)
//原始搜索數據
rsp
=
searchZiYingGoods
(
req2
,
false
,
nil
,
nil
,
1
)
return
rsp
}
//自营型号查询
/*
...
...
@@ -194,7 +200,7 @@ func searchZiYingGoods( req map[string]string,zy bool,classList *model.ZhyClassL
if
strings
.
Contains
(
k
,
"/"
)
{
k_temp
=
strings
.
Split
(
k
,
"/"
)
if
len
(
k_temp
)
==
2
{
isok
:=
makeQuery
(
query
,
source
,
k_temp
,
&
goods_temp_status
,
&
v
,
&
keyword
,
&
is_sample
)
isok
:=
makeQuery
(
query
,
source
,
k_temp
,
&
goods_temp_status
,
&
v
,
&
keyword
,
&
is_sample
,
&
goods_name_arr
)
if
!
isok
{
continue
;
}
...
...
@@ -257,8 +263,8 @@ func searchZiYingGoods( req map[string]string,zy bool,classList *model.ZhyClassL
//综合排序
if
com_rank
,
ok
:=
req
[
"com_rank"
];
ok
&&
strings
.
TrimSpace
(
com_rank
)
==
"1"
{
source
.
Sort
(
"sort"
,
true
)
//a
sc
source
.
Sort
(
"single_price"
,
false
)
//de
sc
source
.
Sort
(
"sort"
,
false
)
//de
sc
source
.
Sort
(
"single_price"
,
true
)
//a
sc
defaultSort
=
false
}
if
defaultSort
{
...
...
@@ -269,13 +275,13 @@ func searchZiYingGoods( req map[string]string,zy bool,classList *model.ZhyClassL
length
:=
int64
(
10
)
if
offset
,
ok
:=
req
[
"offset"
];
ok
{
if
offsetInt
,
err
:=
strconv
.
ParseInt
(
offset
,
10
,
64
);
err
!
=
nil
&&
offsetInt
>
0
{
if
offsetInt
,
err
:=
strconv
.
ParseInt
(
offset
,
10
,
64
);
err
=
=
nil
&&
offsetInt
>
0
{
length
=
offsetInt
}
}
page
:=
int64
(
1
)
if
p
,
ok
:=
req
[
"p"
];
ok
{
if
pInt
,
err
:=
strconv
.
ParseInt
(
p
,
10
,
64
);
err
!
=
nil
&&
pInt
>
0
{
if
pInt
,
err
:=
strconv
.
ParseInt
(
p
,
10
,
64
);
err
=
=
nil
&&
pInt
>
0
{
page
=
pInt
}
}
...
...
@@ -470,106 +476,113 @@ func searchZiYingGoods( req map[string]string,zy bool,classList *model.ZhyClassL
}
referer
:=
middleware
.
Context
.
GetHeader
(
"Referer"
)
if
flag
<=
0
&&
referer
!=
""
&&
php2go
.
Stripos
(
referer
,
"/s/?k="
,
0
)
==
-
1
{
pagesize
:=
length
totalPage
:=
math
.
Ceil
(
float64
(
hitsTotal
)
/
float64
(
pagesize
))
var
total
int64
if
totalPage
>
1
{
if
hitsTotal
>
10000
{
total
=
10000
if
flag
<=
0
&&
php2go
.
Stripos
(
referer
,
"/s/?k="
,
0
)
==
-
1
{
response
=
getPage
(
response
,
length
,
hitsTotal
)
}
rsp
.
Data
=
response
return
rsp
}
//處理分頁信息
func
getPage
(
response
map
[
string
]
interface
{},
length
int64
,
hitsTotal
int64
)
map
[
string
]
interface
{}{
pagesize
:=
length
totalPage
:=
math
.
Ceil
(
float64
(
hitsTotal
)
/
float64
(
pagesize
))
var
(
total
int64
offsetInt
int
err
error
)
if
totalPage
>
1
{
if
hitsTotal
>
10000
{
total
=
10000
}
else
{
total
=
hitsTotal
}
_zy_orgin_search
:=
zy_orgin_search
p
:=
_zy_orgin_search
[
"p"
]
if
p
==
""
{
p
=
"1"
}
offset
:=
_zy_orgin_search
[
"offset"
]
offsetInt
,
err
=
strconv
.
Atoi
(
offset
)
if
err
==
nil
&&
offsetInt
>
0
{
offset
=
strconv
.
FormatInt
(
int64
(
offsetInt
),
10
)
}
else
{
offsetInt
=
10
offset
=
"10"
}
if
isAdmin
{
//如果是自营同步输出
//自定義分頁
delete
(
_zy_orgin_search
,
"callback"
)
delete
(
_zy_orgin_search
,
"PHPSESSID"
)
delete
(
_zy_orgin_search
,
"hcy_test"
)
delete
(
_zy_orgin_search
,
"Array"
)
page
:=
make
(
map
[
string
]
interface
{},
0
)
page
[
"orgin_search"
]
=
_zy_orgin_search
page
[
"total"
]
=
strconv
.
FormatInt
(
total
,
10
)
page
[
"current_page"
]
=
p
page
[
"offset"
]
=
offset
if
totalPage
>
1000
{
page
[
"total_page"
]
=
"1000"
}
else
{
total
=
hitsTotal
page
[
"total_page"
]
=
strconv
.
FormatInt
(
int64
(
totalPage
),
10
)
}
_zy_orgin_search
:=
zy_orgin_search
p
:=
_zy_orgin_search
[
"p"
]
if
p
==
""
{
p
=
"1"
pageData
:=
make
(
map
[
int
]
int
,
0
)
pInt
:=
int
(
1
)
pInt
,
err
=
strconv
.
Atoi
(
p
)
if
err
!=
nil
{
pInt
=
int
(
1
)
}
offset
:=
_zy_orgin_search
[
"offset"
]
offsetInt
,
err
:=
strconv
.
Atoi
(
offset
)
if
err
==
nil
&&
offsetInt
>
0
{
offset
=
strconv
.
FormatInt
(
int64
(
offsetInt
),
10
)
}
else
{
offset
=
"10"
}
if
isAdmin
{
//如果是自营同步输出
//自定義分頁
delete
(
_zy_orgin_search
,
"callback"
)
delete
(
_zy_orgin_search
,
"PHPSESSID"
)
delete
(
_zy_orgin_search
,
"hcy_test"
)
delete
(
_zy_orgin_search
,
"Array"
)
page
:=
make
(
map
[
string
]
interface
{},
0
)
page
[
"orgin_search"
]
=
_zy_orgin_search
page
[
"total"
]
=
strconv
.
FormatInt
(
total
,
10
)
page
[
"current_page"
]
=
p
page
[
"offset"
]
=
offset
if
totalPage
>
1000
{
page
[
"total_page"
]
=
"1000"
}
else
{
page
[
"total_page"
]
=
strconv
.
FormatInt
(
int64
(
totalPage
),
10
)
}
pageData
:=
make
(
map
[
int
]
int
,
0
)
pInt
:=
int
(
1
)
pInt
,
err
=
strconv
.
Atoi
(
p
)
if
err
!=
nil
{
pInt
=
int
(
1
)
}
if
pInt
>
1000
{
pInt
=
1000
if
pInt
>
1000
{
pInt
=
1000
}
if
pInt
>
996
{
for
i
:=
pInt
-
10
;
i
<=
pInt
;
i
++
{
//原始查询参数拼接
pageData
[
i
]
=
i
}
if
pInt
>
996
{
for
i
:=
pInt
-
10
;
i
<=
pInt
;
i
++
{
//原始查询参数拼接
pageData
[
i
]
=
i
}
else
{
pageNum
:=
0
for
i
:=
1
;
i
<=
int
(
totalPage
);
i
++
{
if
pageNum
==
10
{
break
}
}
else
{
pageNum
:=
0
for
i
:=
1
;
i
<=
int
(
totalPage
);
i
++
{
if
pageNum
==
10
{
break
}
if
pInt
>
6
&&
pInt
<=
996
{
//大于10页只获取中间10页
if
i
<
pInt
-
5
||
i
>
pInt
+
5
{
continue
}
if
pInt
>
6
&&
pInt
<=
996
{
//大于10页只获取中间10页
if
i
<
pInt
-
5
||
i
>
pInt
+
5
{
continue
}
fmt
.
Println
(
"i:"
,
i
)
pageData
[
i
]
=
i
pageNum
++
}
//fmt.Println("i:",i)
pageData
[
i
]
=
i
pageNum
++
}
page
[
"page_data"
]
=
pageData
response
[
"page"
]
=
page
}
else
{
//非同步输出自己输出分页样式
page
,
err
:=
strconv
.
Atoi
(
p
)
if
err
!=
nil
{
page
=
int
(
1
)
}
pageSize
:=
10
if
page
<
1
{
page
=
1
}
if
pageSize
<
1
{
pageSize
=
10
}
paging
:=
common
.
Paginator
(
page
,
pageSize
,
365
)
pageHtml
:=
makePageInfo
(
paging
,
page
)
response
[
"page"
]
=
pageHtml
}
page
[
"page_data"
]
=
common
.
MapSort
(
pageData
)
response
[
"page"
]
=
page
}
else
{
response
[
"page"
]
=
map
[
string
]
interface
{}{
"total"
:
totalPage
}
//非同步输出自己输出分页样式
page
,
err
:=
strconv
.
Atoi
(
p
)
if
err
!=
nil
||
page
<
1
{
page
=
int
(
1
)
}
paging
:=
common
.
Paginator
(
page
,
offsetInt
,
int64
(
hitsTotal
))
pageHtml
:=
makePageInfo
(
paging
,
page
)
response
[
"page"
]
=
pageHtml
}
}
else
{
response
[
"page"
]
=
map
[
string
]
interface
{}{
"total"
:
totalPage
}
}
rsp
.
Data
=
response
return
rsp
return
response
}
func
makePageInfo
(
paginator
map
[
string
]
interface
{},
currentPage
int
)
string
{
//fmt.Printf("%+v",paginator)
pageHtml
:=
""
pageHtml
+=
`<div class="pagination">`
pageHtml
+=
fmt
.
Sprintf
(
`<a class="prev" href="/product-%d.html">«</a> `
,
paginator
[
"firstpage"
])
...
...
@@ -588,7 +601,7 @@ func makePageInfo(paginator map[string]interface{},currentPage int) string{
}
func
makeQuery
(
query
*
elastic
.
BoolQuery
,
source
*
elastic
.
SearchSource
,
conditions
[]
string
,
goods_temp_status
*
int
,
searchValue
*
string
,
keyword
*
string
,
is_sample
*
bool
)
bool
{
keyword
*
string
,
is_sample
*
bool
,
goods_name_arr
*
[]
string
)
bool
{
var
(
err
error
...
...
@@ -665,6 +678,7 @@ func makeQuery(query *elastic.BoolQuery,source *elastic.SearchSource,conditions
return
false
}
//提取汉子
//goods_name_cn 里面装的汉子
reg
=
regexp
.
MustCompile
(
`[\p{Han}]+`
)
goods_name_cn
:=
reg
.
FindAllString
(
*
searchValue
,
-
1
)
if
len
(
goods_name_cn
)
>
0
{
...
...
@@ -672,8 +686,8 @@ func makeQuery(query *elastic.BoolQuery,source *elastic.SearchSource,conditions
goods_name_cn
[
k
]
=
strings
.
TrimSpace
(
v
)
}
}
//去除汉字,并以空格分词条
//term_v 里面装的非汉子
reg
=
regexp
.
MustCompile
(
`[\P{Han}]+`
)
term_v
=
reg
.
FindAllString
(
*
searchValue
,
-
1
)
if
len
(
term_v
)
>
0
{
...
...
@@ -681,15 +695,15 @@ func makeQuery(query *elastic.BoolQuery,source *elastic.SearchSource,conditions
term_v
[
k
]
=
strings
.
TrimSpace
(
v
)
}
}
goods_name_arr
:=
append
(
term_v
,
goods_name_cn
...
)
//fmt.Println("goods_name_arr",goods_name_arr
)
*
goods_name_arr
=
append
(
*
goods_name_arr
,
term_v
...
)
*
goods_name_arr
=
append
(
*
goods_name_arr
,
goods_name_cn
...
)
*
keyword
=
*
searchValue
for
_
,
v
:=
range
term_v
{
if
v
!=
""
{
query
.
Must
(
elastic
.
NewTermQuery
(
"goods_name"
,
v
))
}
}
if
len
(
goods_name_
arr
)
>
0
{
if
len
(
goods_name_
cn
)
>
0
{
query
.
Must
(
elastic
.
NewMatchQuery
(
"goods_name_cn"
,
strings
.
Join
(
goods_name_cn
,
" "
))
.
MinimumShouldMatch
(
"100%"
))
}
...
...
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