def related_questions(self): """Return questions that are 'morelikethis' document.""" # Only documents in default IA categories have related. if ( self.redirect_url() or not self.current_revision or self.category not in settings.IA_DEFAULT_CATEGORIES or self.locale not in settings.AAQ_LANGUAGES ): return [] # First try to get the results from the cache key = "wiki_document:related_questions:%s" % self.id questions = cache.get(key) if questions is not None: statsd.incr("wiki.related_questions.cache.hit") log.debug("Getting MLT questions for {doc} from cache.".format(doc=repr(self))) return questions try: statsd.incr("wiki.related_questions.cache.miss") max_age = settings.SEARCH_DEFAULT_MAX_QUESTION_AGE start_date = int(time.time()) - max_age s = Question.get_mapping_type().search() questions = ( s.values_dict("id", "question_title", "url") .filter( question_locale=self.locale, product__in=[p.slug for p in self.get_products()], question_has_helpful=True, created__gte=start_date, ) .query( __mlt={ "fields": ["question_title", "question_content"], "like_text": self.title, "min_term_freq": 1, "min_doc_freq": 1, } )[:3] ) questions = list(questions) cache.add(key, questions) except ES_EXCEPTIONS: statsd.incr("wiki.related_questions.esexception") log.exception("ES MLT related_questions") questions = [] return questions
def related_questions(self): """Return questions that are 'morelikethis' document.""" # Only documents in default IA categories have related. if (self.redirect_url() or not self.current_revision or self.category not in settings.IA_DEFAULT_CATEGORIES or self.locale not in settings.AAQ_LANGUAGES): return [] # First try to get the results from the cache key = 'wiki_document:related_questions:%s' % self.id questions = cache.get(key) if questions is not None: statsd.incr('wiki.related_questions.cache.hit') log.debug('Getting MLT questions for {doc} from cache.' .format(doc=repr(self))) return questions try: statsd.incr('wiki.related_questions.cache.miss') max_age = settings.SEARCH_DEFAULT_MAX_QUESTION_AGE start_date = int(time.time()) - max_age s = Question.get_mapping_type().search() questions = s.values_dict('id', 'question_title', 'url').filter( question_locale=self.locale, product__in=[p.slug for p in self.get_products()], question_has_helpful=True, created__gte=start_date ).query( __mlt={ 'fields': ['question_title', 'question_content'], 'like_text': self.title, 'min_term_freq': 1, 'min_doc_freq': 1, } )[:3] questions = list(questions) cache.add(key, questions) except ES_EXCEPTIONS as exc: statsd.incr('wiki.related_questions.esexception') log.exception('ES MLT related_questions') questions = [] return questions
def related_questions(self): """Return questions that are 'morelikethis' document.""" # Only documents in default IA categories have related. if (self.redirect_url() or not self.current_revision or self.category not in settings.IA_DEFAULT_CATEGORIES): return [] # First try to get the results from the cache key = 'wiki_document:related_questions:%s' % self.id questions = cache.get(key) if questions is not None: statsd.incr('wiki.related_questions.cache.hit') log.debug('Getting MLT questions for {doc} from cache.' .format(doc=repr(self))) return questions try: statsd.incr('wiki.related_questions.cache.miss') max_age = settings.SEARCH_DEFAULT_MAX_QUESTION_AGE start_date = int(time.time()) - max_age s = Question.get_mapping_type().search() questions = s.values_dict('id', 'question_title', 'url').filter( question_locale=self.locale, product__in=[p.slug for p in self.get_products()], question_has_helpful=True, created__gte=start_date ).query( __mlt={ 'fields': ['question_title', 'question_content'], 'like_text': self.title, 'min_term_freq': 1, 'min_doc_freq': 1, } )[:3] questions = list(questions) cache.add(key, questions) except ES_EXCEPTIONS as exc: statsd.incr('wiki.related_questions.esexception') log.error('ES MLT {err} related_questions for {doc}'.format( doc=repr(self), err=str(exc))) questions = [] return questions