Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
P
physical
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
alpha
physical
Commits
18202504
Commit
18202504
authored
Aug 23, 2019
by
段英荣
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'recomment_pictorial' into 'master'
Recomment pictorial See merge request
!431
parents
2670eaf9
aa8c7e81
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
80 additions
and
24 deletions
+80
-24
group.py
search/views/group.py
+57
-18
topic.py
trans2es/models/topic.py
+23
-6
No files found.
search/views/group.py
View file @
18202504
...
...
@@ -13,6 +13,7 @@ from libs.es import ESPerform
from
search.utils.group
import
GroupUtils
from
search.utils.common
import
GroupSortTypes
from
libs.es
import
ESPerform
from
trans2es.models.topic
import
CommunityCategoryTagRelation
from
trans2es.models.pictorial
import
PictorialTopics
from
trans2es.models.pictorial
import
CommunityPictorialActivity
from
alpha_types.venus
import
PICTORIAL_ACTIVITY_SORT
...
...
@@ -96,6 +97,10 @@ def pictorial_sort(user_id=-1, sort_type=GroupSortTypes.HOT_RECOMMEND, offset=0,
@bind
(
"physical/search/pictorial_topic"
)
def
pictorial_topic
(
topic_id
=-
1
,
offset
=
0
,
size
=
10
):
"""
帖子详情页的榜单推荐
先获取该帖子所属榜单 过滤下线的无帖子的被删除的榜单
再根据该帖子下的标签去获取有这些标签的榜单
最后根据该标签对应的分类标签去获取榜单
:remark 入选画报
:param user_id:
:param sort_type:
...
...
@@ -108,7 +113,7 @@ def pictorial_topic(topic_id=-1, offset=0, size=10):
# 获取es链接对象
es_cli_obj
=
ESPerform
.
get_cli
()
q
=
{}
# 获取帖子
从属的画报
# 获取帖子
及该帖子的标签
q
[
"query"
]
=
{
"bool"
:
{
"must"
:
[
...
...
@@ -143,26 +148,30 @@ def pictorial_topic(topic_id=-1, offset=0, size=10):
for
item
in
result_dict
[
"hits"
]:
pict_pictorial_ids_list
=
item
[
"_source"
][
"pictorial_id"
]
topic_tag_list
=
item
[
"_source"
][
"tag_list"
]
##先拿到当前帖子对应的标签的分类ID
tag_type_ids
=
CommunityCategoryTagRelation
.
objects
.
filter
(
tag_id__in
=
topic_tag_list
,
is_online
=
True
,
is_deleted
=
False
)
.
values_list
(
"category_tag_id"
,
flat
=
True
)
logging
.
info
(
"get tag_type_ids:
%
s"
%
tag_type_ids
)
# 拿到所属榜单
if
len
(
pict_pictorial_ids_list
)
>
0
:
q
[
"query"
]
=
{
"bool"
:
{
"must"
:
[{
"terms"
:
{
"id"
:
pict_pictorial_ids_list
}
},
{
"term"
:
{
"is_online"
:
True
}
},
{
"term"
:
{
"is_deleted"
:
False
}
},
]
}
...
...
@@ -183,13 +192,18 @@ def pictorial_topic(topic_id=-1, offset=0, size=10):
pictorial_id
=
item
[
"_source"
][
"id"
]
pictorial_id_list
.
append
(
pictorial_id
)
if
len
(
pictorial_id_list
)
<
10
:
functions_list
=
[]
all_tag
=
[]
all_tag
.
extend
(
topic_tag_list
)
all_tag
.
extend
(
tag_type_ids
)
# 如果不够10个去拿所属标签的榜单和所属分类的标签的榜单
if
len
(
pictorial_id_list
)
<
10
and
len
(
all_tag
)
>
0
:
num
=
10
-
len
(
pictorial_id_list
)
q
[
"query"
]
=
{
q
uery
=
{
"bool"
:
{
"must"
:
[{
"terms"
:
{
"tag_id"
:
topic_tag_list
"tag_id"
:
all_tag
}},
{
"term"
:
{
"is_online"
:
True
...
...
@@ -208,31 +222,56 @@ def pictorial_topic(topic_id=-1, offset=0, size=10):
}]
}
}
functions_list
.
append
({
"filter"
:
{
"constant_score"
:
{
"filter"
:
{
"terms"
:
{
"tag_id"
:
topic_tag_list
}
}
}
},
"weight"
:
200
})
q
=
{
"query"
:
{
"function_score"
:
{
"query"
:
query
,
"score_mode"
:
"sum"
,
"boost_mode"
:
"replace"
,
"functions"
:
functions_list
}
}
}
q
[
"_source"
]
=
{
"includes"
:
[
"id"
,
"tag_id"
]}
q
[
"sort"
]
=
{
q
[
"sort"
]
=
[
{
"_score"
:
{
"order"
:
"desc"
}
},
{
'update_time'
:
{
'order'
:
'desc'
}}
q
[
"from"
]
=
0
q
[
"size"
]
=
10
result_dict
=
ESPerform
.
get_search_results
(
es_cli_obj
,
"pictorial"
,
q
,
offset
,
size
)
}
}
]
result_dict
=
ESPerform
.
get_search_results
(
es_cli_obj
,
"pictorial"
,
q
,
0
,
10
)
logging
.
info
(
"get result_dict:
%
s"
%
result_dict
)
if
len
(
result_dict
[
"hits"
])
>
0
:
for
item
in
result_dict
[
"hits"
]:
id
=
item
[
"_source"
][
"id"
]
if
id
not
in
pictorial_id_list
:
pictorial_id_list
.
append
(
id
)
#
pictorial_list
=
pictorial_id_list
if
len
(
pictorial_id_list
)
<
10
else
pictorial_id_list
[:
10
]
return
{
"pictorial_ids_list"
:
pictorial_list
}
else
:
return
{
"pictorial_ids_list"
:
pictorial_id_list
}
except
:
logging
.
error
(
"catch exception,err_msg:
%
s"
%
traceback
.
format_exc
())
return
{
"pictorial_ids_list"
:
[]}
...
...
trans2es/models/topic.py
View file @
18202504
...
...
@@ -319,22 +319,25 @@ class Topic(models.Model):
datetime_list
=
list
()
if
reply_query_results
.
count
()
>
0
:
for
reply
in
reply_query_results
:
UserExtra_results
=
UserExtra
.
objects
.
using
(
settings
.
SLAVE_DB_NAME
)
.
filter
(
user_id
=
reply
[
'user_id'
])
.
values
(
'is_shadow'
)
if
UserExtra_results
.
count
()
>
0
:
UserExtra_results
=
UserExtra
.
objects
.
using
(
settings
.
SLAVE_DB_NAME
)
.
filter
(
user_id
=
reply
[
'user_id'
])
.
values
(
'is_shadow'
)
if
UserExtra_results
.
count
()
>
0
:
if
not
UserExtra_results
[
0
][
'is_shadow'
]:
datetime_list
.
append
(
reply
[
'create_time'
])
if
len
(
datetime_list
)
>
0
:
if
len
(
datetime_list
)
>
0
:
dt
=
max
(
datetime_list
)
return
datetime
.
datetime
(
dt
.
year
,
dt
.
month
,
dt
.
day
,
dt
.
hour
,
dt
.
minute
,
dt
.
second
,
tzinfo
=
datetime
.
timezone
(
datetime
.
timedelta
(
hours
=
8
)))
return
datetime
.
datetime
(
dt
.
year
,
dt
.
month
,
dt
.
day
,
dt
.
hour
,
dt
.
minute
,
dt
.
second
,
tzinfo
=
datetime
.
timezone
(
datetime
.
timedelta
(
hours
=
8
)))
else
:
dt
=
self
.
create_time
return
datetime
.
datetime
(
dt
.
year
,
dt
.
month
,
dt
.
day
,
dt
.
hour
,
dt
.
minute
,
dt
.
second
,
tzinfo
=
datetime
.
timezone
(
datetime
.
timedelta
(
hours
=
8
)))
else
:
dt
=
self
.
create_time
return
datetime
.
datetime
(
dt
.
year
,
dt
.
month
,
dt
.
day
,
dt
.
hour
,
dt
.
minute
,
dt
.
second
,
tzinfo
=
datetime
.
timezone
(
datetime
.
timedelta
(
hours
=
8
)))
return
datetime
.
datetime
(
dt
.
year
,
dt
.
month
,
dt
.
day
,
dt
.
hour
,
dt
.
minute
,
dt
.
second
,
tzinfo
=
datetime
.
timezone
(
datetime
.
timedelta
(
hours
=
8
)))
except
:
return
datetime
.
datetime
(
1980
,
1
,
1
,
0
,
0
,
0
,
tzinfo
=
datetime
.
timezone
(
datetime
.
timedelta
(
hours
=
8
)))
return
datetime
.
datetime
(
1980
,
1
,
1
,
0
,
0
,
0
,
tzinfo
=
datetime
.
timezone
(
datetime
.
timedelta
(
hours
=
8
)))
class
TopicComplaint
(
models
.
Model
):
...
...
@@ -411,6 +414,7 @@ class TopicBillBoard(models.Model):
class
Reply
(
models
.
Model
):
"""帖子回复"""
class
Meta
:
verbose_name
=
"帖子回复"
db_table
=
"reply"
...
...
@@ -422,3 +426,16 @@ class Reply(models.Model):
is_online
=
models
.
BooleanField
(
verbose_name
=
u'是否上线'
)
pictorial_id
=
models
.
IntegerField
(
verbose_name
=
u"榜单ID"
)
class
CommunityCategoryTagRelation
(
models
.
Model
):
class
Meta
:
verbose_name
=
u"标签分类对应关系"
db_table
=
"community_category_tag_relation"
id
=
models
.
IntegerField
(
primary_key
=
True
,
verbose_name
=
u"主键ID"
)
is_deleted
=
models
.
BooleanField
(
verbose_name
=
u"是否删除"
)
is_online
=
models
.
BooleanField
(
verbose_name
=
u"是否上线"
)
tag_id
=
models
.
IntegerField
(
verbose_name
=
u"标签ID"
)
category_tag_id
=
models
.
IntegerField
(
verbose_name
=
u"标签类型ID"
)
create_time
=
models
.
DateTimeField
(
verbose_name
=
u'创建时间'
,
default
=
datetime
.
datetime
.
fromtimestamp
(
0
))
update_time
=
models
.
DateTimeField
(
verbose_name
=
u'更新时间'
,
default
=
datetime
.
datetime
.
fromtimestamp
(
0
))
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