Commit 6e5fce4e authored by 李小芳's avatar 李小芳

Merge branch 'hot_search_query' into 'master'

Hot search query

See merge request !48
parents d8dba5ae 0a1c912e
...@@ -64,7 +64,8 @@ def get_suggest_tips(query, lat, lng, offset=0, size=50, device_id=None): ...@@ -64,7 +64,8 @@ def get_suggest_tips(query, lat, lng, offset=0, size=50, device_id=None):
ret_list = equal_data ret_list = equal_data
if len(ret_list) >= 50: if len(ret_list) >= 50:
return ret_list logging.info("user_search_query:%s,get_sug_num:%s" % (query, len(ret_list)))
return ret_list[:50]
else: else:
query_ret_list = [] query_ret_list = []
...@@ -118,9 +119,11 @@ def get_suggest_tips(query, lat, lng, offset=0, size=50, device_id=None): ...@@ -118,9 +119,11 @@ def get_suggest_tips(query, lat, lng, offset=0, size=50, device_id=None):
#### ####
if len(ret_list) >= 50: if len(ret_list) >= 50:
logging.info("user_search_query:%s,get_sug_num:%s" % (query, len(ret_list)))
return ret_list[0:50] return ret_list[0:50]
elif len(ret_list) < 50 and len(ret_list) > 3: elif len(ret_list) < 50 and len(ret_list) > 3:
logging.info("user_search_query:%s,get_sug_num:%s" % (query, len(ret_list)))
return ret_list return ret_list
else: else:
...@@ -137,13 +140,13 @@ def get_suggest_tips(query, lat, lng, offset=0, size=50, device_id=None): ...@@ -137,13 +140,13 @@ def get_suggest_tips(query, lat, lng, offset=0, size=50, device_id=None):
have_read_tips_set=have_read_tips_set, have_read_tips_set=have_read_tips_set,
sub_index_name=sub_index_name) sub_index_name=sub_index_name)
ret_list.extend(pinyin_ret_list) ret_list.extend(pinyin_ret_list)
logging.info("user_search_query:%s,get_sug_num:%s" % (query, len(ret_list)))
logging.info("get ret_list:%s" % ret_list)
return ret_list return ret_list
except: except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc()) logging.error("catch exception,err_msg:%s" % traceback.format_exc())
logging.info("error_user_search_query:%s,get_sug_num:%s" % (query, 0))
return list() return list()
...@@ -201,7 +204,6 @@ def get_query_by_es(query='', lat=0, lng=0, size=0, offset=0, highlight_query=No ...@@ -201,7 +204,6 @@ def get_query_by_es(query='', lat=0, lng=0, size=0, offset=0, highlight_query=No
for tips_item in result_dict["suggest"]["tips-suggest"]: for tips_item in result_dict["suggest"]["tips-suggest"]:
for hit_item in tips_item["options"]: for hit_item in tips_item["options"]:
logging.info("get hit_item:%s" % hit_item)
if hit_item["_source"]["ori_name"] not in have_read_tips_set: if hit_item["_source"]["ori_name"] not in have_read_tips_set:
have_read_tips_set.add(hit_item["_source"]["ori_name"]) have_read_tips_set.add(hit_item["_source"]["ori_name"])
highlight_marks = u'<ems>%s</ems>' % query highlight_marks = u'<ems>%s</ems>' % query
......
class DorisRouter(object):
def db_for_read(self, model, **hints):
if model._meta.app_label == "doris":
return 'doris'
return None
def db_for_write(self, model, **hints):
if model._meta.app_label == "doris":
return 'doris'
return None
def allow_relation(self, obj1, obj2, **hints):
if obj1._meta.app_label == 'doris' or \
obj2._meta.app_label == 'doris':
return True
return None
def allow_migrate(self, db, app_label, model_name=None, **hints):
if app_label == 'doris':
return db == 'doris'
return None
...@@ -20,7 +20,6 @@ def uuid4(): ...@@ -20,7 +20,6 @@ def uuid4():
def get_tips_suggest_list(instance_cn_name): def get_tips_suggest_list(instance_cn_name):
try: try:
print(instance_cn_name)
# ch_full_weight = 6.0 * 1000 # ch_full_weight = 6.0 * 1000
# py_full_weight = 3.0 * 1000 # py_full_weight = 3.0 * 1000
full_weight = 3.0 * 1000 full_weight = 3.0 * 1000
......
...@@ -6,6 +6,7 @@ import traceback ...@@ -6,6 +6,7 @@ import traceback
import json import json
from libs.cache import redis_client from libs.cache import redis_client
from trans2es.models.query_word_conversion import TagConversion, DoctorConversion, HospitalConversion from trans2es.models.query_word_conversion import TagConversion, DoctorConversion, HospitalConversion
from trans2es.models.strategy_search_word import StrategyHistoryQueryWords
class TagTab(object): class TagTab(object):
...@@ -96,6 +97,17 @@ class QueryWordAttr(object): ...@@ -96,6 +97,17 @@ class QueryWordAttr(object):
doctab = DocTab() doctab = DocTab()
hostab = HosTab() hostab = HosTab()
@classmethod
def get_hot_search_query_word_weight(cls, name):
try:
search_num = StrategyHistoryQueryWords.objects.filter(keyword=name, is_delete=0).values_list(
"search_num", flat=True).first()
return search_num * 0.01
except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
return 0.0
@classmethod @classmethod
def get_project_query_word_weight(cls, name): def get_project_query_word_weight(cls, name):
try: try:
...@@ -162,6 +174,20 @@ class QueryWordAttr(object): ...@@ -162,6 +174,20 @@ class QueryWordAttr(object):
logging.error("catch exception,err_msg:%s" % traceback.format_exc()) logging.error("catch exception,err_msg:%s" % traceback.format_exc())
return 0 return 0
@classmethod
def get_search_query_results_num(cls, name):
try:
total_num = 0
data = StrategyHistoryQueryWords.objects.filter(keyword=name, is_delete=0).values("answer_num",
"tractate_num",
"diary_num").first()
for value in data.values():
total_num += value
return total_num
except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
return 0
from gm_rpcd.all import bind from gm_rpcd.all import bind
from libs.cache import redis_client from libs.cache import redis_client
......
...@@ -33,11 +33,8 @@ class Command(BaseCommand): ...@@ -33,11 +33,8 @@ class Command(BaseCommand):
try: try:
es_cli = ESPerform.get_cli() es_cli = ESPerform.get_cli()
type_name1 = "suggest-v1" type_name1 = "suggest-v1"
type_name = "suggest" type_name = "suggest"
if len(options["type"]): if len(options["type"]):
if options["type"] == "all" or type_name == options["type"] or type_name1 == options["type"]: if options["type"] == "all" or type_name == options["type"] or type_name1 == options["type"]:
type_name = options["type"] type_name = options["type"]
......
# coding=utf8
from __future__ import unicode_literals, absolute_import, print_function
from django.db import models
from django.conf import settings
class StrategyHistoryQueryWords(models.Model):
"""
历史搜索词
"""
class Meta:
app_label = 'doris'
db_table = 'strategy_history_query_words'
keyword = models.CharField(u'项目介绍', max_length=48)
is_delete = models.BooleanField(u'是否上线', default=True)
search_num = models.IntegerField(verbose_name=u'搜索次数')
answer_num = models.IntegerField(verbose_name=u'回答搜索结果次数')
tractate_num = models.IntegerField(verbose_name=u'帖子搜索结果次数')
diary_num = models.IntegerField(verbose_name=u'日记搜索结果次数')
...@@ -13,7 +13,8 @@ import elasticsearch.helpers ...@@ -13,7 +13,8 @@ import elasticsearch.helpers
import sys import sys
import copy import copy
from trans2es.models import doctor, itemwiki, collectwiki, brandwiki, productwiki, tag, wordresemble from trans2es.models import doctor, itemwiki, collectwiki, brandwiki, productwiki, tag, wordresemble, \
strategy_search_word
from trans2es.utils.doctor_transfer import DoctorTransfer, DoctorTransferV1 from trans2es.utils.doctor_transfer import DoctorTransfer, DoctorTransferV1
from trans2es.utils.hospital_transfer import HospitalTransfer, HospitalTransferV1 from trans2es.utils.hospital_transfer import HospitalTransfer, HospitalTransferV1
from trans2es.utils.itemwiki_transfer import ItemWikiTransfer, ItemWikiTransferV1 from trans2es.utils.itemwiki_transfer import ItemWikiTransfer, ItemWikiTransferV1
...@@ -22,6 +23,7 @@ from trans2es.utils.brandwiki_transfer import BrandWikiTransfer, BrandWikiTransf ...@@ -22,6 +23,7 @@ from trans2es.utils.brandwiki_transfer import BrandWikiTransfer, BrandWikiTransf
from trans2es.utils.productwiki_transfer import ProduceWikiTransfer, ProduceWikiTransferV1 from trans2es.utils.productwiki_transfer import ProduceWikiTransfer, ProduceWikiTransferV1
from trans2es.utils.tag_transfer import TagTransfer, TagTransferV1 from trans2es.utils.tag_transfer import TagTransfer, TagTransferV1
from trans2es.utils.wordresemble import WordResemble, WordResembleV1 from trans2es.utils.wordresemble import WordResemble, WordResembleV1
from trans2es.utils.search_query import SearchWord
from libs.es import ESPerform from libs.es import ESPerform
from libs.tools import tzlc, getMd5Digest from libs.tools import tzlc, getMd5Digest
from trans2es.commons.words_utils import QueryWordAttr from trans2es.commons.words_utils import QueryWordAttr
...@@ -139,7 +141,7 @@ class TypeInfo(object): ...@@ -139,7 +141,7 @@ class TypeInfo(object):
(item_dict, suggest_list) = data (item_dict, suggest_list) = data
if item_dict: if item_dict:
if item_dict["tips_name_type"] == 4: if item_dict["tips_name_type"] == 4 or item_dict["tips_name_type"] == 5:
instance.name = instance.keyword instance.name = instance.keyword
resemble_list = WordResemble.get_word_resemble_list(str(instance.name)) resemble_list = WordResemble.get_word_resemble_list(str(instance.name))
...@@ -366,6 +368,28 @@ def get_type_info_map(): ...@@ -366,6 +368,28 @@ def get_type_info_map():
round_insert_chunk_size=5, round_insert_chunk_size=5,
round_insert_period=2, round_insert_period=2,
), ),
TypeInfo(
name='suggest',
type='search_query', # tag
model=strategy_search_word.StrategyHistoryQueryWords,
query_deferred=lambda: strategy_search_word.StrategyHistoryQueryWords.objects.using(
settings.DORIS_DB_NAME).all().query,
get_data_func=SearchWord.get_search_query,
bulk_insert_chunk_size=100,
round_insert_chunk_size=5,
round_insert_period=2
),
TypeInfo(
name='suggest-v1',
type='search_query-v1', # tag
model=strategy_search_word.StrategyHistoryQueryWords,
query_deferred=lambda: strategy_search_word.StrategyHistoryQueryWords.objects.using(
settings.DORIS_DB_NAME).all().query,
get_data_func=SearchWord.get_search_query,
bulk_insert_chunk_size=100,
round_insert_chunk_size=5,
round_insert_period=2
),
TypeInfo( TypeInfo(
name='suggest-v1', name='suggest-v1',
type='doctor_tips-v1', # doctor type='doctor_tips-v1', # doctor
......
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
import traceback
from libs.tools import getMd5Digest
from trans2es.commons.words_utils import QueryWordAttr, get_tips_word_type
from trans2es.commons.commons import get_tips_suggest_list_v1
class SearchWord(object):
@classmethod
def get_search_query(self, instance):
try:
ret_list = list()
item_dict = dict()
item_dict["id"] = getMd5Digest(str(instance.keyword))
item_dict["ori_name"] = instance.keyword
item_dict["is_online"] = False if instance.is_delete else True
item_dict["order_weight"] = QueryWordAttr.get_hot_search_query_word_weight(instance.keyword)
item_dict["results_num"] = QueryWordAttr.get_search_query_results_num(instance.keyword)
item_dict["type_flag"] = get_tips_word_type(instance.keyword)
item_dict["offline_score"] = 0.0
item_dict["tips_name_type"] = 5
ret_list.append(item_dict)
suggest_list = get_tips_suggest_list_v1(str(instance.keyword).lower())
return (item_dict, suggest_list)
except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
return ([], [])
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment