--- 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('<span class="highlight">', '</span>')
+ 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
+
+
+
+
--- 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,
--- /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 }}
+ <link rel="stylesheet" href="{{LDT_MEDIA_PREFIX}}css/workspace.css" />
+{% endblock %}
+
+{% block content %}
+
+{% if msg %}
+{{ msg }}
+{% else %}
+
+ {% trans "Results for " %} <b> {{ search }}</b> :
+
+ {% autoescape off %}
+ <ul>
+ {% for res in results %}
+ <li>
+ <a href="{% url ldt.ldt_utils.views.display_highlighted_seg res.project_id res.iri_id res.ensemble_id res.decoupage_id res.element_id%}">{{ res.segment_title }}</a><br />
+ {{ res.context }}<br />
+ </li>
+ {% endfor %}
+ </ul>
+ {% endautoescape %}
+
+{% endif %}
+
+{% endblock %}
\ No newline at end of file
--- 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<project_id>.*)/(?P<content_id>.*)/(?P<ensemble_id>.*)/(?P<cutting_id>.*)/(?P<segment_id>.*)/$', 'views.init_segment'),
url(r'^segmentLdt/(?P<project_id>.*)/(?P<content_id>.*)/(?P<ensemble_id>.*)/(?P<cutting_id>.*)/(?P<segment_id>.*)/$', 'views.ldt_segment'),
url(r'^segmentHighlight/(?P<project_id>.*)/(?P<content_id>.*)/(?P<ensemble_id>.*)/(?P<cutting_id>.*)/(?P<segment_id>.*)/$', 'views.highlight_segment'),
+ url(r'^displayHighligtedSegment/(?P<project_id>.*)/(?P<content_id>.*)/(?P<ensemble_id>.*)/(?P<cutting_id>.*)/(?P<segment_id>.*)/$', 'views.display_highlighted_seg'),
)
urlpatterns += patterns('',
--- 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):
--- 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("<html><head></head><body>Error : No result</body></html>");
- 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(":")
--- 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)
--- 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