mirror of
https://github.com/Hopiu/xapian-haystack.git
synced 2026-03-16 22:20:31 +00:00
Implemented more_like_this
This commit is contained in:
parent
2c80f85ec6
commit
fa02d65941
2 changed files with 19 additions and 10 deletions
|
|
@ -163,8 +163,8 @@ class XapianSearchBackendTestCase(TestCase):
|
|||
self.sb.update(self.msi, self.sample_objs)
|
||||
self.assertEqual(len(self.xapian_search('')), 3)
|
||||
|
||||
# TODO: Until this is implemented, we should see empty results.
|
||||
self.assertEqual(self.sb.more_like_this(self.sample_objs[0])['hits'], 0)
|
||||
self.assertEqual(self.sb.more_like_this(self.sample_objs[0])['hits'], 3)
|
||||
self.assertEqual([dict(doc) for doc in self.xapian_search('')], [{'name': u'david1', 'text': u'Indexed!\n1', 'pub_date': u'2009-02-24T00:00:00', 'id': u'tests.mockmodel.1'}, {'name': u'david2', 'text': u'Indexed!\n2', 'pub_date': u'2009-02-23T00:00:00', 'id': u'tests.mockmodel.2'}, {'name': u'david3', 'text': u'Indexed!\n3', 'pub_date': u'2009-02-22T00:00:00', 'id': u'tests.mockmodel.3'}])
|
||||
|
||||
def test_document_count(self):
|
||||
self.sb.update(self.msi, self.sample_objs)
|
||||
|
|
|
|||
|
|
@ -104,7 +104,7 @@ class SearchBackend(BaseSearchBackend):
|
|||
enquire = xapian.Enquire(database)
|
||||
enquire.set_query(query)
|
||||
for match in enquire.get_mset(0, DEFAULT_MAX_RESULTS):
|
||||
database.delete_document(match.get_document().get_docid())
|
||||
database.delete_document(match.get_docid())
|
||||
else:
|
||||
for model in models:
|
||||
database.delete_document(DOCUMENT_CT_TERM_PREFIX + '%s.%s' % (model._meta.app_label, model._meta.module_name))
|
||||
|
|
@ -170,7 +170,22 @@ class SearchBackend(BaseSearchBackend):
|
|||
return 0
|
||||
return database.get_doccount()
|
||||
|
||||
def _process_results(self, matches, facets, highlights=[]):
|
||||
def more_like_this(self, model_instance):
|
||||
database = xapian.Database(self.path)
|
||||
query = xapian.Query(DOCUMENT_ID_TERM_PREFIX + self.get_identifier(model_instance))
|
||||
enquire = xapian.Enquire(database)
|
||||
enquire.set_query(query)
|
||||
rset = xapian.RSet()
|
||||
for match in enquire.get_mset(0, DEFAULT_MAX_RESULTS):
|
||||
rset.add_document(match.get_docid())
|
||||
query = xapian.Query(xapian.Query.OP_OR,
|
||||
[expand.term for expand in enquire.get_eset(DEFAULT_MAX_RESULTS, rset)]
|
||||
)
|
||||
enquire.set_query(query)
|
||||
matches = enquire.get_mset(0, DEFAULT_MAX_RESULTS)
|
||||
return self._process_results(matches)
|
||||
|
||||
def _process_results(self, matches, facets=None, highlights=[]):
|
||||
facets_dict = {
|
||||
'fields': {},
|
||||
'dates': {},
|
||||
|
|
@ -227,12 +242,6 @@ class SearchBackend(BaseSearchBackend):
|
|||
value = force_unicode(value)
|
||||
return value
|
||||
|
||||
def more_like_this(self, model_instance):
|
||||
return {
|
||||
'results': [],
|
||||
'hits': 0,
|
||||
}
|
||||
|
||||
|
||||
class SearchQuery(BaseSearchQuery):
|
||||
def __init__(self, backend=None):
|
||||
|
|
|
|||
Loading…
Reference in a new issue