From 097808ca4492323058a9c64331334064aadfefd3 Mon Sep 17 00:00:00 2001 From: David Sauve Date: Fri, 12 Feb 2010 14:40:14 -0500 Subject: [PATCH] Corrected an issue with stemming that caused it to be skipped when searching without limiting to a field --- AUTHORS | 1 + tests/xapian_tests/tests/xapian_backend.py | 3 ++- tests/xapian_tests/tests/xapian_query.py | 12 ++++++------ xapian_backend.py | 2 +- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/AUTHORS b/AUTHORS index 50a797f..8d3cf87 100644 --- a/AUTHORS +++ b/AUTHORS @@ -18,3 +18,4 @@ Thanks to: * wshallum for a patch that makes date facets compatible with Python 2.4 * askfor for reporting issues with narrow_queries and float fields. * Brandon Konkle for a patch that corrected the behaviour of weights on multiple term boosts. + * Adam Endicott for the initial patch that corrected an oversight with stemming not always being done during a search. diff --git a/tests/xapian_tests/tests/xapian_backend.py b/tests/xapian_tests/tests/xapian_backend.py index 8f793d1..76c1f84 100644 --- a/tests/xapian_tests/tests/xapian_backend.py +++ b/tests/xapian_tests/tests/xapian_backend.py @@ -452,7 +452,8 @@ class LiveXapianSearchQueryTestCase(TestCase): self.sq.add_filter(SQ(created__lt=datetime.datetime(2009, 2, 12, 12, 13, 0))) self.sq.add_filter(SQ(title__gte='B')) self.sq.add_filter(SQ(id__in=[1, 2, 3])) - self.assertEqual(self.sq.build_query().get_description(), u'Xapian::Query(((Zwhy OR why) AND VALUE_RANGE 2 00010101000000 20090210015900 AND ( AND_NOT VALUE_RANGE 3 a david) AND ( AND_NOT VALUE_RANGE 4 20090212121300 99990101000000) AND VALUE_RANGE 1 b zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz AND (ZXID1 OR XID1 OR ZXID2 OR XID2 OR ZXID3 OR XID3)))') + self.assertEqual(self.sq.build_query().get_description(), u'Xapian::Query(((Zwhi OR why) AND VALUE_RANGE 2 00010101000000 20090210015900 AND ( AND_NOT VALUE_RANGE 3 a david) AND ( AND_NOT VALUE_RANGE 4 20090212121300 99990101000000) AND VALUE_RANGE 1 b zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz AND (ZXID1 OR XID1 OR ZXID2 OR XID2 OR ZXID3 OR XID3)))') + import pdb; pdb.set_trace() def test_log_query(self): backends.reset_search_queries() diff --git a/tests/xapian_tests/tests/xapian_query.py b/tests/xapian_tests/tests/xapian_query.py index 7ca13b3..57a3112 100644 --- a/tests/xapian_tests/tests/xapian_query.py +++ b/tests/xapian_tests/tests/xapian_query.py @@ -88,7 +88,7 @@ class XapianSearchQueryTestCase(TestCase): def test_build_query_multiple_words_mixed(self): self.sq.add_filter(SQ(content='why') | SQ(content='hello')) self.sq.add_filter(~SQ(content='world')) - self.assertEqual(self.sq.build_query().get_description(), u'Xapian::Query(((Zwhy OR why OR Zhello OR hello) AND ( AND_NOT (Zworld OR world))))') + self.assertEqual(self.sq.build_query().get_description(), u'Xapian::Query(((Zwhi OR why OR Zhello OR hello) AND ( AND_NOT (Zworld OR world))))') def test_build_query_multiple_word_field_exact(self): self.sq.add_filter(SQ(foo='hello')) @@ -116,27 +116,27 @@ class XapianSearchQueryTestCase(TestCase): def test_build_query_in_filter_single_words(self): self.sq.add_filter(SQ(content='why')) self.sq.add_filter(SQ(title__in=["Dune", "Jaws"])) - self.assertEqual(self.sq.build_query().get_description(), u'Xapian::Query(((Zwhy OR why) AND (ZXTITLEdune OR XTITLEdune OR ZXTITLEjaw OR XTITLEjaws)))') + self.assertEqual(self.sq.build_query().get_description(), u'Xapian::Query(((Zwhi OR why) AND (ZXTITLEdune OR XTITLEdune OR ZXTITLEjaw OR XTITLEjaws)))') def test_build_query_not_in_filter_single_words(self): self.sq.add_filter(SQ(content='why')) self.sq.add_filter(~SQ(title__in=["Dune", "Jaws"])) - self.assertEqual(self.sq.build_query().get_description(), u'Xapian::Query(((Zwhy OR why) AND ( AND_NOT (ZXTITLEdune OR XTITLEdune OR ZXTITLEjaw OR XTITLEjaws))))') + self.assertEqual(self.sq.build_query().get_description(), u'Xapian::Query(((Zwhi OR why) AND ( AND_NOT (ZXTITLEdune OR XTITLEdune OR ZXTITLEjaw OR XTITLEjaws))))') def test_build_query_in_filter_multiple_words(self): self.sq.add_filter(SQ(content='why')) self.sq.add_filter(SQ(title__in=["A Famous Paper", "An Infamous Article"])) - self.assertEqual(self.sq.build_query().get_description(), u'Xapian::Query(((Zwhy OR why) AND ((XTITLEa PHRASE 3 XTITLEfamous PHRASE 3 XTITLEpaper) OR (XTITLEan PHRASE 3 XTITLEinfamous PHRASE 3 XTITLEarticle))))') + self.assertEqual(self.sq.build_query().get_description(), u'Xapian::Query(((Zwhi OR why) AND ((XTITLEa PHRASE 3 XTITLEfamous PHRASE 3 XTITLEpaper) OR (XTITLEan PHRASE 3 XTITLEinfamous PHRASE 3 XTITLEarticle))))') def test_build_query_not_in_filter_multiple_words(self): self.sq.add_filter(SQ(content='why')) self.sq.add_filter(~SQ(title__in=["A Famous Paper", "An Infamous Article"])) - self.assertEqual(self.sq.build_query().get_description(), u'Xapian::Query(((Zwhy OR why) AND ( AND_NOT ((XTITLEa PHRASE 3 XTITLEfamous PHRASE 3 XTITLEpaper) OR (XTITLEan PHRASE 3 XTITLEinfamous PHRASE 3 XTITLEarticle)))))') + self.assertEqual(self.sq.build_query().get_description(), u'Xapian::Query(((Zwhi OR why) AND ( AND_NOT ((XTITLEa PHRASE 3 XTITLEfamous PHRASE 3 XTITLEpaper) OR (XTITLEan PHRASE 3 XTITLEinfamous PHRASE 3 XTITLEarticle)))))') def test_build_query_in_filter_datetime(self): self.sq.add_filter(SQ(content='why')) self.sq.add_filter(SQ(pub_date__in=[datetime.datetime(2009, 7, 6, 1, 56, 21)])) - self.assertEqual(self.sq.build_query().get_description(), u'Xapian::Query(((Zwhy OR why) AND (ZXPUB_DATE20090706015621 OR XPUB_DATE20090706015621)))') + self.assertEqual(self.sq.build_query().get_description(), u'Xapian::Query(((Zwhi OR why) AND (ZXPUB_DATE20090706015621 OR XPUB_DATE20090706015621)))') def test_clean(self): self.assertEqual(self.sq.clean('hello world'), 'hello world') diff --git a/xapian_backend.py b/xapian_backend.py index 11d8015..371b726 100755 --- a/xapian_backend.py +++ b/xapian_backend.py @@ -1099,7 +1099,7 @@ class SearchQuery(BaseSearchQuery): else: return xapian.Query( xapian.Query.OP_OR, - xapian.Query('Z%s' % term), + xapian.Query('Z%s' % stem(term)), xapian.Query(term) )