Commit 36214811 authored by 段英荣's avatar 段英荣

add

parent 836ce8ce
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
import logging
import traceback
import pypinyin
from pypinyin import lazy_pinyin
from gm_types.gaia import SERVICE_ITEM_PRICE_TYPE, DOCTOR_TYPE
def get_tips_suggest_list(instance_cn_name):
try:
ch_full_weight = 6.0
py_full_weight = 3.0
py_acronym_full_weight = 3.0
py_acronym_prefix_weight = 2
ch_prefix_weight = 1.5
py_prefix_weight = 1.0
# 命中开始部分加权
begin_prefix_weight = 1.2
ch_full_word = instance_cn_name
py_full_word = ''.join(lazy_pinyin(ch_full_word))
py_acronym_full_word = ''.join(lazy_pinyin(ch_full_word, style=pypinyin.FIRST_LETTER))
suggest_list = list()
cur_index = 0
# 中文
for i in range(len(ch_full_word)):
for j in range(i, len(ch_full_word) + 1):
ch_name_term = ch_full_word[i:j].strip()
if ch_name_term:
prefix_weight = ch_prefix_weight if len(ch_name_term) != len(
ch_full_word) else ch_full_weight
suggest_type = 0 if len(ch_name_term) != len(ch_full_word) else 1
begin_prefix_weight = begin_prefix_weight if i == 0 else 1.0
suggest_item = {
"input": [ch_name_term],
"word_weight": (1.0 * len(ch_name_term) / len(
(ch_full_word))) * prefix_weight * begin_prefix_weight,
"suggest_type": suggest_type,
"cur_index": cur_index
}
cur_index += 1
suggest_list.append(suggest_item)
# 拼音
for i in range(len(py_full_word)):
for j in range(i, len(py_full_word) + 1):
py_name_term = py_full_word[i:j].strip()
if py_name_term:
prefix_weight = py_prefix_weight if len(py_name_term) != len(
py_full_word) else py_full_weight
suggest_type = 2 if len(py_name_term) != len(py_full_word) else 3
begin_prefix_weight = begin_prefix_weight if i == 0 else 1.0
suggest_item = {
"input": [py_name_term],
"word_weight": (1.0 * len(py_name_term) / len(
py_full_word)) * prefix_weight * begin_prefix_weight,
"suggest_type": suggest_type,
"cur_index": cur_index
}
cur_index += 1
suggest_list.append(suggest_item)
# 简写
for i in range(len(py_acronym_full_word)):
for j in range(i, len(py_acronym_full_word) + 1):
py_acronym_term = py_acronym_full_word[i:j].strip()
if py_acronym_term:
prefix_weight = py_acronym_prefix_weight if len(py_acronym_term) != len(
py_acronym_full_word) else py_acronym_full_weight
suggest_type = 4 if len(py_acronym_term) != len(py_acronym_full_word) else 5
begin_prefix_weight = begin_prefix_weight if i == 0 else 1.0
suggest_item = {
"input": [py_acronym_term],
"word_weight": (1.0 * len(py_acronym_term) / len(
py_acronym_full_word)) * prefix_weight * begin_prefix_weight,
"suggest_type": suggest_type,
"cur_index": cur_index
}
cur_index += 1
suggest_list.append(suggest_item)
return suggest_list
except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
return list()
# -*- coding: utf-8 -*-
from __future__ import unicode_literals, absolute_import, print_function
from django.db import models
import logging
import traceback
import datetime
class BrandWiki(models.Model):
class Meta:
verbose_name = u'品牌'
db_table = 'wiki_brand'
id = models.IntegerField(verbose_name=u'品牌ID', primary_key=True)
name = models.CharField(u'项目介绍', max_length=48)
description = models.TextField(u'品牌简介')
is_online = models.BooleanField(u'是否上线', default=True)
create_time = models.DateTimeField(verbose_name=u'创建时间', default=datetime.datetime.fromtimestamp(0))
# -*- coding: utf-8 -*-
from __future__ import unicode_literals, absolute_import, print_function
from django.db import models
import datetime
class CollectWiki(models.Model):
class Meta:
verbose_name = u'聚合新百科'
db_table = 'wiki_collect'
id = models.IntegerField(verbose_name=u'聚合ID', primary_key=True)
name = models.CharField(u'聚合名称', max_length=48)
description = models.TextField(u'简介')
is_online = models.BooleanField(u'是否上线', default=True)
create_time = models.DateTimeField(verbose_name=u'创建时间', default=datetime.datetime.fromtimestamp(0))
......@@ -8,6 +8,9 @@ import logging
from libs.es import ESPerform
from django.db import models
import datetime
from gm_types.gaia import (
DOCTOR_PROCESS_STATUS, DOCTOR_TYPE, PHONE_HINTS, TOPIC_TYPE, TAG_TYPE, DisplayTag,
SERVICE_FLAG)
......@@ -21,5 +24,23 @@ class Doctor(models.Model):
id = models.CharField(max_length=100, primary_key=True)
name = models.CharField(max_length=200, verbose_name=u"姓名", db_index=True)
is_online = models.BooleanField(default=False, help_text=u"是否上线", verbose_name=u"上线", db_index=True)
doctor_type = models.CharField(max_length=1, default=DOCTOR_TYPE.DOCTOR,
choices=DOCTOR_TYPE, null=False,
verbose_name=u'医生类型')
class Service(models.Model):
class Meta:
verbose_name = u'福利'
verbose_name_plural = u'福利'
db_table = 'api_service'
app_label = 'api'
name = models.CharField(max_length=100, null=False, verbose_name=u'福利名称')
short_description = models.CharField(max_length=100, null=False, verbose_name=u'一句话描述')
detail_description = models.TextField(max_length=2000, verbose_name=u'详细描述')
doctor = models.ForeignKey(Doctor, related_name='services')
phone = models.CharField(max_length=20, null=True, blank=True, verbose_name=u'服务电话')
is_online = models.BooleanField(default=False, help_text=u"是否上线", verbose_name=u"上线")
# -*- coding: utf-8 -*-
from __future__ import unicode_literals, absolute_import, print_function
import datetime
from django.db import models
from gm_types.wiki import TREATMENT_TYPE, ANESTHESIA_TYPE, ACHE_LEVEL_NEW
import traceback
import logging
class ItemWiki(models.Model):
class Meta:
verbose_name = u'项目新百科'
db_table = 'wiki_item'
id = models.IntegerField(verbose_name=u'百科ID', primary_key=True)
name = models.CharField(u'项目名称', max_length=48)
description = models.TextField(u'介绍')
use_result = models.CharField(u'使用功效', max_length=128)
is_online = models.BooleanField(u'是否上线', default=True)
create_time = models.DateTimeField(verbose_name=u'创建时间', default=datetime.datetime.fromtimestamp(0))
# -*- coding: utf-8 -*-
from __future__ import unicode_literals, absolute_import, print_function
from django.db import models
from gm_types.wiki import PRODUCT_PARAMS, ANESTHESIA_TYPE, TREATMENT_TYPE
import logging, traceback
import datetime
class ProductWiki(models.Model):
class Meta:
verbose_name = u'物品百科'
db_table = 'wiki_product'
id = models.IntegerField(u"物品百科id", primary_key=True)
name = models.CharField(u'物品名称', max_length=50)
product_type = models.CharField(u'物品类型', max_length=4)
brand_id = models.IntegerField(u"商品id", null=True)
description = models.TextField(u'项目描述', blank=True)
special = models.TextField(u'特色')
effect = models.CharField(u'功效', max_length=128)
treatment_method = models.CharField(u'治疗方式', max_length=8, choices=TREATMENT_TYPE)
is_online = models.BooleanField(u'是否上线', default=True)
create_time = models.DateTimeField(verbose_name=u'创建时间', default=datetime.datetime.fromtimestamp(0))
# coding=utf8
from __future__ import unicode_literals, absolute_import, print_function
import operator
from django.db import models
from django.db.models import Q
from django.db import transaction
from gm_types.gaia import TAG_ALERT_TYPE
from django.utils import timezone
from gm_upload import IMG_TYPE, ImgUrlField
class Tag(models.Model):
class Meta:
verbose_name = "标签"
verbose_name_plural = "标签"
app_label = 'api'
#objects = TagManager()
name = models.CharField(
verbose_name='名称',
max_length=64,
null=False,
blank=False,
db_index=True,
unique=True,
)
tag_type = models.CharField(
verbose_name='标签类型',
max_length=4,
null=False,
blank=False,
choices=TAG_TYPE,
)
is_online = models.BooleanField(null=False, default=True, verbose_name='是否上线')
......@@ -13,9 +13,16 @@ import elasticsearch.helpers
import sys
import copy
from trans2es.models import doctor
from trans2es.models import doctor,itemwiki,collectwiki,brandwiki,productwiki,tag
from trans2es.utils.doctor_transfer import DoctorTransfer
from trans2es.utils.hospital_transfer import HospitalTransfer
from trans2es.utils.itemwiki_transfer import ItemWikiTransfer
from trans2es.utils.collectwiki_transfer import CollectWikiTransfer
from trans2es.utils.brandwiki_transfer import BrandWikiTransfer
from trans2es.utils.productwiki_transfer import ProduceWikiTransfer
from trans2es.utils.tag_transfer import TagTransfer
from libs.es import ESPerform
from gm_types.gaia import SERVICE_ITEM_PRICE_TYPE, DOCTOR_TYPE
__es = None
......@@ -239,13 +246,73 @@ def get_type_info_map():
type_info_list = [
TypeInfo(
name='suggest',
type='doctor_tips',# 医生tips
type='doctor_tips',# doctor
model=doctor.Doctor,
query_deferred=lambda: doctor.Doctor.objects.all().query,
query_deferred=lambda: doctor.Doctor.objects.all().filter(doctor_type=DOCTOR_TYPE.DOCTOR),
get_data_func=DoctorTransfer.get_doctor_suggest_data_list,
bulk_insert_chunk_size=100,
round_insert_chunk_size=5,
round_insert_period=2,
),
TypeInfo(
name='suggest',
type='hospital_tips', # doctor
model=doctor.Doctor,
query_deferred=lambda: doctor.Doctor.objects.all().filter(services__is_online=True, doctor_type=DOCTOR_TYPE.OFFICER),
get_data_func=HospitalTransfer.get_hospital_suggest_data_list,
bulk_insert_chunk_size=100,
round_insert_chunk_size=5,
round_insert_period=2,
),
TypeInfo(
name='suggest',
type='itemwiki_tips', # itemwiki
model=itemwiki.ItemWiki,
query_deferred=lambda: itemwiki.ItemWiki.objects.all().query,
get_data_func=ItemWikiTransfer.get_itemwiki_suggest_data_list,
bulk_insert_chunk_size=100,
round_insert_chunk_size=5,
round_insert_period=2,
),
TypeInfo(
name='suggest',
type='collectwiki_tips', # collectwiki
model=collectwiki.CollectWiki,
query_deferred=lambda: collectwiki.CollectWiki.objects.all().query,
get_data_func=CollectWikiTransfer.get_collectwiki_suggest_data_list,
bulk_insert_chunk_size=100,
round_insert_chunk_size=5,
round_insert_period=2,
),
TypeInfo(
name='suggest',
type='brandwiki_tips', # brandwiki
model=brandwiki.BrandWiki,
query_deferred=lambda: brandwiki.BrandWiki.objects.all().query,
get_data_func=BrandWikiTransfer.get_brandwiki_suggest_data_list,
bulk_insert_chunk_size=100,
round_insert_chunk_size=5,
round_insert_period=2,
),
TypeInfo(
name='suggest',
type='productwiki_tips', # brandwiki
model=productwiki.ProductWiki,
query_deferred=lambda: productwiki.ProductWiki.objects.all().query,
get_data_func=ProduceWikiTransfer.get_productwiki_suggest_data_list,
bulk_insert_chunk_size=100,
round_insert_chunk_size=5,
round_insert_period=2,
),
TypeInfo(
name='suggest',
type='tag_tips', # tag
model=tag.Tag,
query_deferred=lambda: tag.Tag.objects.all().query,
get_data_func=TagTransfer.get_tag_suggest_data_list,
bulk_insert_chunk_size=100,
round_insert_chunk_size=5,
round_insert_period=2,
)
]
......
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
import logging
import traceback
from libs.tools import tzlc
from libs.es import ESPerform
from libs.cache import redis_client
import json
from trans2es.commons.commons import get_tips_suggest_list
class BrandWikiTransfer(object):
test_es_info_list = [
{'host': '10.30.57.94', 'port': 9200}
]
@classmethod
def get_brandwiki_suggest_data_list(cls, instance):
try:
ret_list = list()
item_dict = dict()
item_dict["id"] = instance.id
item_dict["ori_name"] = instance.name
item_dict["is_online"] = instance.is_online
item_dict["order_weight"] = 0.0
item_dict["results_num"] = 0
item_dict["type_flag"] = "unknown"
item_dict["offline_score"] = 0.0
item_dict["tips_name_type"] = 3
ret_list.append(item_dict)
suggest_list = get_tips_suggest_list(instance.name)
return (item_dict,suggest_list)
except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
return ([],[])
\ No newline at end of file
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
import logging
import traceback
from libs.tools import tzlc
from libs.es import ESPerform
from libs.cache import redis_client
import json
from trans2es.commons.commons import get_tips_suggest_list
class CollectWikiTransfer(object):
test_es_info_list = [
{'host': '10.30.57.94', 'port': 9200}
]
@classmethod
def get_collectwiki_suggest_data_list(cls, instance):
try:
ret_list = list()
item_dict = dict()
item_dict["id"] = instance.id
item_dict["ori_name"] = instance.name
item_dict["is_online"] = instance.is_online
item_dict["order_weight"] = 0.0
item_dict["results_num"] = 0
item_dict["type_flag"] = "unknown"
item_dict["offline_score"] = 0.0
item_dict["tips_name_type"] = 3
ret_list.append(item_dict)
suggest_list = get_tips_suggest_list(instance.name)
return (item_dict,suggest_list)
except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
return ([],[])
\ No newline at end of file
......@@ -9,22 +9,10 @@ from libs.es import ESPerform
from libs.cache import redis_client
import json
import pypinyin
from pypinyin import lazy_pinyin
from trans2es.commons.commons import get_tips_suggest_list
class DoctorTransfer(object):
ch_full_weight = 6.0
py_full_weight = 3.0
py_acronym_full_weight = 3.0
py_acronym_prefix_weight = 2
ch_prefix_weight = 1.5
py_prefix_weight = 1.0
# 命中开始部分加权
begin_prefix_weight = 1.2
test_es_info_list = [
{'host': '10.30.57.94', 'port': 9200}
]
......@@ -66,13 +54,11 @@ class DoctorTransfer(object):
result_dict = ESPerform.get_search_results(ESPerform.get_cli(cls.test_es_info_list), sub_index_name="doctor", doc_type="doctor", query_body=q,offset=0,size=0)
logging.info("duan add,result_dict:%s" % (str(result_dict)))
doctor_results = result_dict["total_count"]
redis_key_prefix = "search_tips:tips_mapping_num"
redis_data = redis_client.hget(redis_key_prefix,doctor_name)
logging.info("duan add,redis_data type:%s,val:%s" % (type(redis_data),str(redis_data)))
redis_val_dict = json.loads(str(redis_data)) if redis_data else {}
total_count = doctor_results
......@@ -88,7 +74,6 @@ class DoctorTransfer(object):
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
@classmethod
def get_doctor_suggest_data_list(cls, instance):
try:
......@@ -101,68 +86,13 @@ class DoctorTransfer(object):
item_dict["order_weight"] = 0.0
item_dict["results_num"] = 0
item_dict["type_flag"] = "unknown"
item_dict["type_flag"] = "doctor"
item_dict["offline_score"] = 0.0
item_dict["tips_name_type"] = 2
ret_list.append(item_dict)
suggest_list = list()
ch_full_word = instance.name
py_full_word = ''.join(lazy_pinyin(ch_full_word))
py_acronym_full_word = ''.join(lazy_pinyin(ch_full_word,style=pypinyin.FIRST_LETTER))
cur_index = 0
#中文
for i in range(len(ch_full_word)):
for j in range(i,len(ch_full_word)+1):
ch_name_term = ch_full_word[i:j].strip()
if ch_name_term:
prefix_weight = cls.ch_prefix_weight if len(ch_name_term)!=len(ch_full_word) else cls.ch_full_weight
suggest_type = 0 if len(ch_name_term)!=len(ch_full_word) else 1
begin_prefix_weight = cls.begin_prefix_weight if i==0 else 1.0
suggest_item = {
"input":[ch_name_term],
"word_weight":(1.0*len(ch_name_term)/len((ch_full_word))) * prefix_weight * begin_prefix_weight,
"suggest_type": suggest_type,
"cur_index": cur_index
}
cur_index += 1
suggest_list.append(suggest_item)
#拼音
for i in range(len(py_full_word)):
for j in range(i,len(py_full_word)+1):
py_name_term = py_full_word[i:j].strip()
if py_name_term:
prefix_weight = cls.py_prefix_weight if len(py_name_term)!=len(py_full_word) else cls.py_full_weight
suggest_type = 2 if len(py_name_term)!=len(py_full_word) else 3
begin_prefix_weight = cls.begin_prefix_weight if i==0 else 1.0
suggest_item = {
"input":[py_name_term],
"word_weight":(1.0*len(py_name_term)/len(py_full_word)) * prefix_weight * begin_prefix_weight,
"suggest_type": suggest_type,
"cur_index": cur_index
}
cur_index += 1
suggest_list.append(suggest_item)
#简写
for i in range(len(py_acronym_full_word)):
for j in range(i,len(py_acronym_full_word)+1):
py_acronym_term = py_acronym_full_word[i:j].strip()
if py_acronym_term:
prefix_weight = cls.py_acronym_prefix_weight if len(py_acronym_term)!=len(py_acronym_full_word) else cls.py_acronym_full_weight
suggest_type = 4 if len(py_acronym_term)!=len(py_acronym_full_word) else 5
begin_prefix_weight = cls.begin_prefix_weight if i==0 else 1.0
suggest_item = {
"input":[py_acronym_term],
"word_weight":(1.0*len(py_acronym_term)/len(py_acronym_full_word)) * prefix_weight * begin_prefix_weight,
"suggest_type": suggest_type,
"cur_index": cur_index
}
cur_index += 1
suggest_list.append(suggest_item)
suggest_list = get_tips_suggest_list(instance.name)
return (item_dict,suggest_list)
except:
......
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
import logging
import traceback
from libs.tools import tzlc
from libs.es import ESPerform
from libs.cache import redis_client
import json
from trans2es.commons.commons import get_tips_suggest_list
class HospitalTransfer(object):
test_es_info_list = [
{'host': '10.30.57.94', 'port': 9200}
]
@classmethod
def get_hospital_suggest_data_list(cls, instance):
try:
ret_list = list()
item_dict = dict()
item_dict["id"] = instance.id
item_dict["ori_name"] = instance.name
item_dict["is_online"] = instance.is_online
item_dict["order_weight"] = 0.0
item_dict["results_num"] = 0
item_dict["type_flag"] = "hospital"
item_dict["offline_score"] = 0.0
item_dict["tips_name_type"] = 1
ret_list.append(item_dict)
suggest_list = get_tips_suggest_list(instance.name)
return (item_dict,suggest_list)
except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
return ([],[])
\ No newline at end of file
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
import logging
import traceback
from libs.tools import tzlc
from libs.es import ESPerform
from libs.cache import redis_client
import json
from trans2es.commons.commons import get_tips_suggest_list
class ItemWikiTransfer(object):
test_es_info_list = [
{'host': '10.30.57.94', 'port': 9200}
]
@classmethod
def get_itemwiki_suggest_data_list(cls, instance):
try:
ret_list = list()
item_dict = dict()
item_dict["id"] = instance.id
item_dict["ori_name"] = instance.name
item_dict["is_online"] = instance.is_online
item_dict["order_weight"] = 0.0
item_dict["results_num"] = 0
item_dict["type_flag"] = "unknown"
item_dict["offline_score"] = 0.0
item_dict["tips_name_type"] = 3
ret_list.append(item_dict)
suggest_list = get_tips_suggest_list(instance.name)
return (item_dict,suggest_list)
except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
return ([],[])
\ No newline at end of file
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
import logging
import traceback
from libs.tools import tzlc
from libs.es import ESPerform
from libs.cache import redis_client
import json
from trans2es.commons.commons import get_tips_suggest_list
class ProduceWikiTransfer(object):
test_es_info_list = [
{'host': '10.30.57.94', 'port': 9200}
]
@classmethod
def get_productwiki_suggest_data_list(cls, instance):
try:
ret_list = list()
item_dict = dict()
item_dict["id"] = instance.id
item_dict["ori_name"] = instance.name
item_dict["is_online"] = instance.is_online
item_dict["order_weight"] = 0.0
item_dict["results_num"] = 0
item_dict["type_flag"] = "unknown"
item_dict["offline_score"] = 0.0
item_dict["tips_name_type"] = 3
ret_list.append(item_dict)
suggest_list = get_tips_suggest_list(instance.name)
return (item_dict,suggest_list)
except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
return ([],[])
\ No newline at end of file
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import sys
import logging
import traceback
from libs.tools import tzlc
from libs.es import ESPerform
from libs.cache import redis_client
import json
from trans2es.commons.commons import get_tips_suggest_list
class TagTransfer(object):
test_es_info_list = [
{'host': '10.30.57.94', 'port': 9200}
]
@classmethod
def get_tag_suggest_data_list(cls, instance):
try:
ret_list = list()
item_dict = dict()
item_dict["id"] = instance.id
item_dict["ori_name"] = instance.name
item_dict["is_online"] = instance.is_online
item_dict["order_weight"] = 0.0
item_dict["results_num"] = 0
item_dict["type_flag"] = "unknown"
item_dict["offline_score"] = 0.0
item_dict["tips_name_type"] = 0
ret_list.append(item_dict)
suggest_list = get_tips_suggest_list(instance.name)
return (item_dict,suggest_list)
except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
return ([],[])
\ No newline at end of file
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