from django.utils.safestring import mark_safe
from django.utils.translation import get_language
from django.core.urlresolvers import reverse
-from django.db.models.signals import post_save, m2m_changed, pre_delete
+from django.db.models.signals import post_save, m2m_changed, pre_delete, post_delete
import jsonfield
from django.conf import settings
instance.book.save()
pre_delete.connect(_pre_delete_handler)
+
def _post_save_handler(sender, instance, **kwargs):
""" refresh all the short_html stuff on BookMedia update """
if sender == BookMedia:
instance.book.save()
post_save.connect(_post_save_handler)
+
+
+@django.dispatch.receiver(post_delete, sender=Book)
+def _remove_book_from_index_handler(sender, instance, **kwargs):
+ """ remove the book from search index, when it is deleted."""
+ idx = search.Index()
+ idx.open(timeout=10000) # 10 seconds timeout.
+ try:
+ idx.remove_book(instance)
+ finally:
+ idx.close()
# -*- coding: utf-8 -*-
from django.conf import settings
-from lucene import SimpleFSDirectory, IndexWriter, CheckIndex, \
+from lucene import SimpleFSDirectory, IndexWriter, IndexWriterConfig, CheckIndex, \
File, Field, Integer, \
NumericField, Version, Document, JavaError, IndexSearcher, \
QueryParser, PerFieldAnalyzerWrapper, \
analyzer = WLAnalyzer()
self.analyzer = analyzer
- def open(self, analyzer=None):
+ def open(self, analyzer=None, timeout=None):
if self.index:
raise Exception("Index is already opened")
- self.index = IndexWriter(self.store, self.analyzer,\
- IndexWriter.MaxFieldLength.LIMITED)
+ conf = IndexWriterConfig(Version.LUCENE_34, analyzer)
+ if timeout:
+ conf.setWriteLockTimeout(long(timeout))
+ self.index = IndexWriter(self.store, conf)
return self.index
def optimize(self):
"""
index = None
- def open(self, analyzer=None, threads=4):
+ def open(self, analyzer=None, **kw):
if ReusableIndex.index:
self.index = ReusableIndex.index
else:
print("opening index")
- Index.open(self, analyzer)
+ Index.open(self, analyzer, **kw)
ReusableIndex.index = self.index
atexit.register(ReusableIndex.close_reusable)