# HG changeset patch # User verrierj # Date 1316011731 -7200 # Node ID a88714473302c667714cf4a57885201b685d98a4 # Parent d5d2439e2503863d6ddd951e4a2fa7ce2b65f317 Added a page to display search results diff -r d5d2439e2503 -r a88714473302 src/ldt/ldt/indexation/__init__.py --- a/src/ldt/ldt/indexation/__init__.py Tue Sep 13 11:02:16 2011 +0200 +++ b/src/ldt/ldt/indexation/__init__.py Wed Sep 14 16:48:51 2011 +0200 @@ -10,6 +10,40 @@ ANALYZER.addAnalyzer("abstract", lucene.FrenchAnalyzer(lucene.Version.LUCENE_CURRENT)) ANALYZER.addAnalyzer("all", lucene.FrenchAnalyzer(lucene.Version.LUCENE_CURRENT)) + +def get_results_with_context(field, query): + res = get_results_list(field, query) + analyzer = lucene.FrenchAnalyzer(lucene.Version.LUCENE_CURRENT) + searcher = get_searcher() + formatter = lucene.SimpleHTMLFormatter('', '') + query = get_query_parser(field).parse(query) + highlighter = lucene.Highlighter(formatter, lucene.QueryScorer (query)) + contexts = [] + + for i in res: + doc = searcher.doc(i.doc) + ids = {"iri_id":doc.get("iri_id"), "ensemble_id":doc.get("ensemble_id"), "decoupage_id":doc.get("decoupage_id"), "element_id":doc.get("element_id"), "project_id":doc.get("project_id")} + segment_title = doc.getField('title').stringValue() + + text = doc.getField(field).stringValue() + ts = analyzer.tokenStream("body", lucene.StringReader(text)) + context = highlighter.getBestFragments(ts, text, settings.LDT_MAX_FRAGMENT_PER_SEARCH, "...") + + ids['context'] = context + ids['segment_title'] = segment_title + contexts.append(ids) + + searcher.close() + return contexts + +def get_results_list(field, query): + indexSearcher = get_searcher() + queryParser = get_query_parser(field) + queryObj = queryParser.parse(query) + hits = indexSearcher.search(queryObj, settings.LDT_MAX_SEARCH_NUMBER) + + return hits.scoreDocs + def get_writer(new=False): lucene.getVMEnv().attachCurrentThread() return lucene.IndexWriter(STORE, ANALYZER, new, lucene.IndexWriter.MaxFieldLength.UNLIMITED) @@ -22,3 +56,7 @@ queryParser = lucene.QueryParser(lucene.Version.LUCENE_30, field, lucene.FrenchAnalyzer(lucene.Version.LUCENE_30)) queryParser.setDefaultOperator(lucene.QueryParser.Operator.AND) return queryParser + + + + diff -r d5d2439e2503 -r a88714473302 src/ldt/ldt/ldt_utils/contentindexer.py --- a/src/ldt/ldt/ldt_utils/contentindexer.py Tue Sep 13 11:02:16 2011 +0200 +++ b/src/ldt/ldt/ldt_utils/contentindexer.py Wed Sep 14 16:48:51 2011 +0200 @@ -98,10 +98,10 @@ doc.add(lucene.Field("ensemble_id", ensembleId, lucene.Field.Store.YES, lucene.Field.Index.NO)) doc.add(lucene.Field("decoupage_id", decoupId, lucene.Field.Store.YES, lucene.Field.Index.NO)) doc.add(lucene.Field("element_id", elementId, lucene.Field.Store.YES, lucene.Field.Index.NO)) - doc.add(lucene.Field("tags", tags, lucene.Field.Store.NO, lucene.Field.Index.ANALYZED)) - doc.add(lucene.Field("title", title, lucene.Field.Store.NO, lucene.Field.Index.ANALYZED)) - doc.add(lucene.Field("abstract", abstract, lucene.Field.Store.NO, lucene.Field.Index.ANALYZED)) - doc.add(lucene.Field("all", " ".join([tags, title, abstract]), lucene.Field.Store.NO, lucene.Field.Index.ANALYZED)) + doc.add(lucene.Field("tags", tags, lucene.Field.Store.YES, lucene.Field.Index.ANALYZED)) + doc.add(lucene.Field("title", title, lucene.Field.Store.YES, lucene.Field.Index.ANALYZED)) + doc.add(lucene.Field("abstract", abstract, lucene.Field.Store.YES, lucene.Field.Index.ANALYZED)) + doc.add(lucene.Field("all", " ".join([tags, title, abstract]), lucene.Field.Store.YES, lucene.Field.Index.ANALYZED)) seg = Segment(content=content, iri_id=content.iri_id, diff -r d5d2439e2503 -r a88714473302 src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/search_results.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/search_results.html Wed Sep 14 16:48:51 2011 +0200 @@ -0,0 +1,30 @@ +{% extends "ldt/ldt_base.html" %} +{% load i18n %} + +{% block css_import %} + {{ block.super }} + +{% endblock %} + +{% block content %} + +{% if msg %} +{{ msg }} +{% else %} + + {% trans "Results for " %} {{ search }} : + + {% autoescape off %} + + {% endautoescape %} + +{% endif %} + +{% endblock %} \ No newline at end of file diff -r d5d2439e2503 -r a88714473302 src/ldt/ldt/ldt_utils/urls.py --- a/src/ldt/ldt/ldt_utils/urls.py Tue Sep 13 11:02:16 2011 +0200 +++ b/src/ldt/ldt/ldt_utils/urls.py Wed Sep 14 16:48:51 2011 +0200 @@ -35,6 +35,7 @@ url(r'^segmentInit/(?P.*)/(?P.*)/(?P.*)/(?P.*)/(?P.*)/$', 'views.init_segment'), url(r'^segmentLdt/(?P.*)/(?P.*)/(?P.*)/(?P.*)/(?P.*)/$', 'views.ldt_segment'), url(r'^segmentHighlight/(?P.*)/(?P.*)/(?P.*)/(?P.*)/(?P.*)/$', 'views.highlight_segment'), + url(r'^displayHighligtedSegment/(?P.*)/(?P.*)/(?P.*)/(?P.*)/(?P.*)/$', 'views.display_highlighted_seg'), ) urlpatterns += patterns('', diff -r d5d2439e2503 -r a88714473302 src/ldt/ldt/ldt_utils/utils.py --- a/src/ldt/ldt/ldt_utils/utils.py Tue Sep 13 11:02:16 2011 +0200 +++ b/src/ldt/ldt/ldt_utils/utils.py Wed Sep 14 16:48:51 2011 +0200 @@ -1,6 +1,6 @@ from copy import deepcopy from django.conf import settings -from ldt.indexation import get_searcher, get_query_parser +from ldt.indexation import get_searcher, get_query_parser, get_results_list import datetime import django.core.urlresolvers import lxml.etree @@ -39,12 +39,10 @@ def query(self, field, query): indexSearcher = get_searcher() - queryParser = get_query_parser(field) - queryObj = queryParser.parse(query) - hits = indexSearcher.search(queryObj, settings.LDT_MAX_SEARCH_NUMBER) + hits = get_results_list(field, query) res = [] - for hit in hits.scoreDocs: + for hit in hits: doc = indexSearcher.doc(hit.doc) res.append({"iri_id":doc.get("iri_id"), "ensemble_id":doc.get("ensemble_id"), "decoupage_id":doc.get("decoupage_id"), "element_id":doc.get("element_id"), "project_id":doc.get("project_id")}) indexSearcher.close() @@ -52,6 +50,7 @@ def query_all(self, query): return self.query("all", query) + class LdtUtils(object): diff -r d5d2439e2503 -r a88714473302 src/ldt/ldt/ldt_utils/views.py --- a/src/ldt/ldt/ldt_utils/views.py Tue Sep 13 11:02:16 2011 +0200 +++ b/src/ldt/ldt/ldt_utils/views.py Wed Sep 14 16:48:51 2011 +0200 @@ -7,6 +7,7 @@ from django.forms.util import ErrorList from django.http import (HttpResponse, HttpResponseRedirect, HttpResponseForbidden, HttpResponseServerError) +from ldt.indexation import get_results_with_context from django.shortcuts import (render_to_response, get_object_or_404, get_list_or_404) from django.template import RequestContext @@ -240,22 +241,23 @@ language_code = request.LANGUAGE_CODE[:2] if request.POST.has_key("ldt_pres"): - ldt_pres = True + url = settings.WEB_URL + django.core.urlresolvers.reverse("ldt.ldt_utils.views.search_init", args=[field, queryStr]) + return render_to_response('ldt/ldt_utils/init_ldt_full.html', {'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/', 'url': url}, context_instance=RequestContext(request)) else: - ldt_pres = False - - url = settings.WEB_URL + django.core.urlresolvers.reverse("ldt.ldt_utils.views.search_init", args=[field, queryStr]) - - # For the moment, we always display the results in a regular LDT template - if ldt_pres : - return render_to_response('ldt/ldt_utils/init_ldt_full.html', {'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/', 'url': url}, context_instance=RequestContext(request)) - else : - return render_to_response('ldt/ldt_utils/init_ldt_full.html', {'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/', 'url': url}, context_instance=RequestContext(request)) + results = get_results_with_context(field, search) + return render_to_response('ldt/ldt_utils/search_results.html', {'results': results, 'search' : search, 'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/'}, context_instance=RequestContext(request)) else: - resp = HttpResponse() - resp.write("Error : No result"); - return resp + msg = _("Please enter valid keywords.") + return render_to_response('ldt/ldt_utils/search_results.html', {'msg' : msg}, context_instance=RequestContext(request)) +def display_highlighted_seg(request, project_id, content_id, ensemble_id, cutting_id, segment_id): + + url = settings.WEB_URL + reverse("ldt.ldt_utils.views.init_segment", args=[project_id, content_id, ensemble_id, cutting_id, segment_id]) + language_code = request.LANGUAGE_CODE[:2] + + return render_to_response('ldt/ldt_utils/init_ldt_full.html', {'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/', 'url': url}, context_instance=RequestContext(request)) + + def search_index_get(request, field, query): language_code = request.LANGUAGE_CODE[:2] @@ -1091,7 +1093,7 @@ try: # The filename arrives with a GET var. file_path = os.path.join(settings.STREAM_PATH, "tmp/" + request.COOKIES[settings.SESSION_COOKIE_NAME] + "/", ldt_utils_path.sanitize_filename(request.GET["filename"])) - if settings.FFMPEG_PATH and os.path.exists(file_path): + if hasattr(settings,'FFMPEG_PATH') and os.path.exists(file_path): output = str(subprocess.Popen([settings.FFMPEG_PATH, "-i", file_path],stderr = subprocess.PIPE).communicate()[1]) m = re.search("Duration:\s*?([\d.:]+)", output, re.M) dur_arr = m.group(1).split(":") diff -r d5d2439e2503 -r a88714473302 src/ldt/ldt/settings.py --- a/src/ldt/ldt/settings.py Tue Sep 13 11:02:16 2011 +0200 +++ b/src/ldt/ldt/settings.py Wed Sep 14 16:48:51 2011 +0200 @@ -73,6 +73,7 @@ ACCOUNT_ACTIVATION_DAYS = getattr(settings, 'ACCOUNT_ACTIVATION_DAYS', 7) LDT_MEDIA_PREFIX = getattr(settings, 'LDT_MEDIA_PREFIX', MEDIA_URL + 'ldt/') LDT_MAX_SEARCH_NUMBER = 50 +LDT_MAX_FRAGMENT_PER_SEARCH = 3 LDT_JSON_DEFAULT_INDENT = 2 AUTO_INDEX_AFTER_SAVE = getattr(settings, 'AUTO_INDEX_AFTER_SAVE', True) diff -r d5d2439e2503 -r a88714473302 web/ldtplatform/config.py.tmpl --- a/web/ldtplatform/config.py.tmpl Tue Sep 13 11:02:16 2011 +0200 +++ b/web/ldtplatform/config.py.tmpl Wed Sep 14 16:48:51 2011 +0200 @@ -74,6 +74,7 @@ REGISTRATION_OPEN = False LDT_MAX_SEARCH_NUMBER = 50 +LDT_MAX_FRAGMENT_PER_SEARCH = 3 LDT_JSON_DEFAULT_INDENT = 0 EMPTY_MEDIA_EXTERNALID = None