# 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